• <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 閱讀(212) 評論(0)  編輯 收藏 引用 所屬分類: algorithm
            久久夜色撩人精品国产| 2021国产精品久久精品| 久久精品夜夜夜夜夜久久| 久久乐国产综合亚洲精品| 久久精品中文字幕无码绿巨人| 久久久噜噜噜久久熟女AA片 | 久久久久久久亚洲精品 | 欧美午夜精品久久久久免费视 | 午夜久久久久久禁播电影| 精品蜜臀久久久久99网站| 久久天堂AV综合合色蜜桃网| 国产午夜久久影院| 久久伊人亚洲AV无码网站| 日韩精品久久久肉伦网站| 国产综合精品久久亚洲| 少妇人妻88久久中文字幕| 久久国产视频99电影| 久久婷婷久久一区二区三区| 伊人久久大香线焦AV综合影院 | 亚洲中文字幕无码一久久区| 久久亚洲综合色一区二区三区| 99精品国产99久久久久久97| 日韩中文久久| 久久精品一区二区影院| 青青草原1769久久免费播放| 浪潮AV色综合久久天堂| 777午夜精品久久av蜜臀| 久久亚洲精品无码观看不卡| 久久精品国产亚洲网站| 国产麻豆精品久久一二三| 亚洲午夜无码久久久久| 国产精品亚洲综合久久| 久久亚洲2019中文字幕| 国产—久久香蕉国产线看观看| 国产精品久久久久9999高清| 久久国产免费观看精品3| 伊人久久精品无码av一区| 久久天天躁狠狠躁夜夜不卡| 久久只有这精品99| 久久精品国产乱子伦| 99精品国产综合久久久久五月天|