• <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| 亚洲国产一成人久久精品| 精品久久无码中文字幕| 潮喷大喷水系列无码久久精品| 人妻无码精品久久亚瑟影视| 久久久精品国产sm调教网站| 久久er99热精品一区二区| 欧美激情精品久久久久| 亚洲精品NV久久久久久久久久| 国产高潮国产高潮久久久| 99久久婷婷免费国产综合精品| 国产99精品久久| 99久久夜色精品国产网站| 亚洲综合熟女久久久30p| 国产午夜精品理论片久久| 人妻无码αv中文字幕久久琪琪布| 26uuu久久五月天| 久久久久无码精品国产app| 青青草原精品99久久精品66| 四虎国产精品免费久久5151| 四虎久久影院| 久久激情亚洲精品无码?V| 99久久夜色精品国产网站| 色偷偷91久久综合噜噜噜噜| 久久国产精品-国产精品| 漂亮人妻被黑人久久精品| 亚洲国产成人乱码精品女人久久久不卡 | 99久久免费国产精品热| 一级女性全黄久久生活片免费 | 久久av无码专区亚洲av桃花岛| 久久99精品国产99久久| 中文无码久久精品| 久久久久无码精品国产app| 97精品伊人久久久大香线蕉| 国产精品久久波多野结衣| 久久男人Av资源网站无码软件| 午夜精品久久久久久毛片| 2020国产成人久久精品| 久久久无码精品亚洲日韩京东传媒 | 国产免费久久精品99久久| 国产精品久久久久9999|