• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            f(sixleaves) = sixleaves

            重劍無鋒 大巧不工

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              95 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks
            坑爹的模擬題目。自己對于這種比較復雜點得模擬題的能力概述還不夠,還多加練習。貼別是做得時候一直再想如何檢查車中間有沒有棋子,炮中間有沒有棋子。到網上參考別人的代碼才發先這么簡單的辦法,自己盡然想不到。多加練習,總結下該題目吧。
              1 #include <stdio.h>
              2 #include <string.h>
              3 #define N 12
              4 
              5 char brd[N][N];
              6 int dx[] = {1,-1,0,0}, dy[] = {0,0,1,-1};
              7 int hx[] = {-2,-1,-2,-1,1,2,1,2};
              8 int hy[] = {-1,-2,1,2,-2,-1,2,1};
              9 int tx[] = {-1,-1,-1,-1,1,1,1,1};
             10 int ty[] = {-1,-1,1,1,-1,-1,1,1};
             11 int cr[2], cc[2];
             12 
             13 
             14 int check(intint);
             15 
             16 int main() {
             17     
             18     int t, bX, bY;
             19     char s[5];
             20     while (scanf("%d%d%d",&t, &bX, &bY), t || bX || bY) {
             21         
             22         memset(brd, 0, sizeof(brd));
             23         cr[0] = cc[0] = cr[1] = cc[1] = 0;
             24         
             25         for (int i = 0; i < t; i++) {
             26             
             27             int rX, rY;
             28             scanf("%s%d%d", s, &rX, &rY);
             29             if ('C' == s[0]) {
             30                 
             31                 if (cr[0]) cr[1] = rX, cc[1] = rY;
             32                 else cr[0] = rX, cc[0] = rY;
             33             }
             34             brd[rX][rY] = s[0];
             35         }
             36         
             37         // 判斷是否四個方向都會被將軍,或者無路可走的方向也認為是被將軍
             38         int cnt = 0;
             39         for (int i = 0; i < 4; i++)
             40             cnt += check(bX + dx[i], bY + dy[i]);
             41         
             42         if (cnt < 4) puts("NO");
             43         else puts("YES");
             44         
             45     }
             46     
             47 }
             48 
             49 int check(int r, int c) {
             50     
             51     // 越界,無路可走
             52     if (r < 1 || r > 3 || c < 4 || c > 6) return 1;
             53     
             54     
             55     // 因為我們沒法保證車中間有沒有其他棋子,所以必須從近到遠一格格檢查
             56     // 車在同行且中間無棋子
             57     for (int j = c - 1; j > 0; j--) {
             58         if (brd[r][j])
             59             if ('R' == brd[r][j]) return 1;
             60             else break;
             61     }
             62     
             63     for (int j = c + 1; j <= 9; j++) {
             64         
             65         if (brd[r][j])
             66             if ('R' == brd[r][j]) return 1;
             67             else break;
             68     }
             69     
             70     
             71     // 車在同列且中間物棋子
             72     for (int j = r - 1; j > 0; j--) {
             73         
             74         if (brd[j][c])
             75             if ('R' == brd[j][c]) return 1;
             76             else break;
             77         
             78     }
             79     
             80     for (int j = r + 1; j <=10; j++) {
             81         
             82         if (brd[j][c])
             83             if ('R' == brd[j][c] || 'G' == brd[j][c]) return 1;
             84             else break;
             85         
             86     }
             87     
             88     // 炮將軍
             89     for (int k = 0; k < 2; k++) {
             90         
             91         // 行有炮
             92         if (r == cr[k]) {
             93             int cnt = 0;
             94             for (int j = c - 1; j > cc[k]; j--) if (brd[r][j]) ++cnt;
             95             if (cnt == 1) return 1;
             96             cnt = 0;
             97             for (int j = c + 1; j < cc[k]; j++) if (brd[r][j]) ++cnt;
             98             if (cnt == 1) return 1;
             99             
            100         }
            101         
            102         // 列有跑
            103         if (c == cc[k]) {
            104             int cnt = 0;
            105             for (int j = r - 1; j > cr[k]; j--) if (brd[j][c]) ++cnt;
            106             if (cnt == 1) return 1;
            107             cnt = 0;
            108             for (int j = r + 1; j < cr[k]; j++) if (brd[j][c]) ++cnt;
            109             if (cnt == 1) return 1;
            110         }
            111         
            112         
            113     }
            114     
            115     // 馬將軍,馬的8個方位
            116     for(int k = 0; k < 8; ++k) {
            117         
            118         int tr = r + hx[k], tc = c + hy[k];
            119         if (tr < 1 || tr > 10 || tc < 1 || tc > 9) continue;
            120         if (brd[tr][tc] == 'H' && (!brd[r + tx[k]][c + ty[k]]))
            121             return 1;
            122         
            123     }
            124     return 0;
            125 }
            posted on 2015-03-15 16:42 swp 閱讀(215) 評論(0)  編輯 收藏 引用 所屬分類: algorithm
            国产成人精品久久综合| 伊人久久大香线蕉av不变影院| 热re99久久精品国99热| 久久只有这里有精品4| 久久99这里只有精品国产| 亚洲αv久久久噜噜噜噜噜| 精品久久久久香蕉网| 国产亚洲美女精品久久久| 思思久久精品在热线热| 久久国产热精品波多野结衣AV| 亚洲国产精品久久| 国产成人精品综合久久久久| 久久精品国产精品青草| 久久久久亚洲av成人网人人软件| 久久久婷婷五月亚洲97号色 | 国产99久久九九精品无码| 亚洲国产精品无码久久青草| 久久久久AV综合网成人| 亚洲国产精品一区二区三区久久| 99久久免费国产精精品| 久久91精品国产91| 久久天天躁狠狠躁夜夜2020老熟妇 | 久久91精品国产91久久户| 97视频久久久| 久久人人爽人爽人人爽av| 久久综合九色综合久99| 久久天堂AV综合合色蜜桃网| 久久99这里只有精品国产| 亚洲精品tv久久久久| 精品久久久久中文字幕一区| 青青国产成人久久91网| 久久99国内精品自在现线| 熟妇人妻久久中文字幕| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 狠狠人妻久久久久久综合| 丰满少妇人妻久久久久久 | 久久精品国产99国产精品| 一本久久a久久精品综合夜夜| 99久久精品午夜一区二区| 国产精品久久久久久久久鸭| 99久久777色|