• <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 閱讀(216) 評論(0)  編輯 收藏 引用 所屬分類: algorithm
            欧美亚洲国产精品久久蜜芽| 精品久久久久久中文字幕| 久久天天躁狠狠躁夜夜2020老熟妇 | 久久精品国产亚洲77777| 日本免费久久久久久久网站| 久久久久亚洲精品无码网址| 久久精品国产99国产精品导航 | 99久久精品免费国产大片| 久久免费香蕉视频| 人妻无码αv中文字幕久久| 香蕉99久久国产综合精品宅男自 | 国产毛片欧美毛片久久久| 国产午夜电影久久| 精品午夜久久福利大片| 亚州日韩精品专区久久久| 久久精品蜜芽亚洲国产AV| 久久亚洲天堂| Xx性欧美肥妇精品久久久久久| 久久久久久久精品妇女99| 国产精品久久久久久久久久免费| 97精品依人久久久大香线蕉97| 精品99久久aaa一级毛片| 国产—久久香蕉国产线看观看 | 久久久久九九精品影院| 精品无码久久久久久国产| 亚洲va国产va天堂va久久| 无码超乳爆乳中文字幕久久| 久久久久久久国产免费看| 国产精品99久久久久久董美香| 国产精品99久久99久久久| 99久久无码一区人妻a黑| 偷窥少妇久久久久久久久| 少妇内射兰兰久久| 亚洲国产高清精品线久久 | 97超级碰碰碰久久久久| 免费精品99久久国产综合精品| 日韩人妻无码精品久久久不卡 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 国产精品内射久久久久欢欢| 人人狠狠综合久久亚洲婷婷| 色综合久久综合网观看|