• <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>

            superman

            聚精會神搞建設 一心一意謀發展
            posts - 190, comments - 17, trackbacks - 0, articles - 0
               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            Section 2.1 - The Castle

            Posted on 2009-03-25 11:22 superman 閱讀(123) 評論(0)  編輯 收藏 引用 所屬分類: USACO
              1 #include <iostream>
              2 
              3 using namespace std;
              4 
              5 int n, m;
              6 int castleStructure[50][50];
              7 int castleRegion[50][50];
              8 
              9 int regionCnt;
             10 int areaOfRegions[2500];
             11 
             12 void getRegion(int i, int j)
             13 {
             14     if (castleRegion[i][j] != -1)
             15         return;
             16     castleRegion[i][j] = regionCnt;
             17     if ((castleStructure[i][j] & 1== 0)   //W
             18         getRegion(i, j - 1);
             19     if ((castleStructure[i][j] & 2== 0)   //N
             20         getRegion(i - 1, j);
             21     if ((castleStructure[i][j] & 4== 0)   //E
             22         getRegion(i, j + 1);
             23     if ((castleStructure[i][j] & 8== 0)   //S
             24         getRegion(i + 1, j);
             25 }
             26 
             27 int main()
             28 {
             29     freopen("castle.in""r", stdin);
             30     freopen("castle.out""w", stdout);
             31 
             32     cin >> m >> n;
             33     for (int i = 0; i < n; i++)
             34     for (int j = 0; j < m; j++)
             35         cin >> castleStructure[i][j];
             36 
             37     memset(castleRegion, 255sizeof(castleRegion));
             38 
             39     for (int i = 0; i < n; i++)
             40     for (int j = 0; j < m; j++)
             41         if (castleRegion[i][j] == -1)
             42         {
             43             getRegion(i, j);
             44             regionCnt++;
             45         }
             46 
             47     //ans 1
             48     cout << regionCnt << endl;
             49 
             50     for (int i = 0; i < n; i++)
             51     for (int j = 0; j < m; j++)
             52         areaOfRegions[castleRegion[i][j]]++;
             53 
             54     int maxAreaOfRegions = 0;
             55     for (int i = 0; i < regionCnt; i++)
             56         maxAreaOfRegions >?= areaOfRegions[i];
             57 
             58     //ans 2
             59     cout << maxAreaOfRegions << endl;
             60 
             61     int maxAreaAfterRemoveOneWall = 0;
             62     struct { int x, y, dir; } theWallToRemove;
             63 
             64     for (int j = 0; j < m; j++)
             65         for (int i = n - 1; i >= 0; i--)
             66         {
             67             if ((castleStructure[i][j] & 1== 1 && j - 1 >= 0)   //W
             68             {
             69                 if (castleRegion[i][j] == castleRegion[i][j - 1])
             70                     continue;
             71                 int t = areaOfRegions[castleRegion[i][j]] + areaOfRegions[castleRegion[i][j - 1]];
             72                 if (t > maxAreaAfterRemoveOneWall)
             73                 {
             74                     maxAreaAfterRemoveOneWall = t;
             75                     theWallToRemove.x = i;
             76                     theWallToRemove.y = j;
             77                     theWallToRemove.dir = 1;
             78                 }
             79             }
             80             if ((castleStructure[i][j] & 2== 2 && i - 1 >= 0)   //N
             81             {
             82                 if (castleRegion[i][j] == castleRegion[i - 1][j])
             83                     continue;
             84                 int t = areaOfRegions[castleRegion[i][j]] + areaOfRegions[castleRegion[i - 1][j]];
             85                 if (t > maxAreaAfterRemoveOneWall)
             86                 {
             87                     maxAreaAfterRemoveOneWall = t;
             88                     theWallToRemove.x = i;
             89                     theWallToRemove.y = j;
             90                     theWallToRemove.dir = 2;
             91                 }
             92             }
             93             if ((castleStructure[i][j] & 4== 4 && j + 1 < m)   //E
             94             {
             95                 if (castleRegion[i][j] == castleRegion[i][j + 1])
             96                     continue;
             97                 int t = areaOfRegions[castleRegion[i][j]] + areaOfRegions[castleRegion[i][j + 1]];
             98                 if (t > maxAreaAfterRemoveOneWall)
             99                 {
            100                     maxAreaAfterRemoveOneWall = t;
            101                     theWallToRemove.x = i;
            102                     theWallToRemove.y = j;
            103                     theWallToRemove.dir = 4;
            104                 }
            105             }
            106             if ((castleStructure[i][j] & 8== 8 && i + 1 < n)   //S
            107             {
            108                 if (castleRegion[i][j] == castleRegion[i + 1][j])
            109                     continue;
            110                 int t = areaOfRegions[castleRegion[i][j]] + areaOfRegions[castleRegion[i + 1][j]];
            111                 if (t > maxAreaAfterRemoveOneWall)
            112                 {
            113                     maxAreaAfterRemoveOneWall = t;
            114                     theWallToRemove.x = i;
            115                     theWallToRemove.y = j;
            116                     theWallToRemove.dir = 8;
            117                 }
            118             }
            119         }
            120 
            121     //ans 3
            122     cout << maxAreaAfterRemoveOneWall << endl;
            123     cout << theWallToRemove.x + 1 << ' '
            124          << theWallToRemove.y + 1 << ' ';
            125     if (theWallToRemove.dir == 1) cout << 'W' << endl;
            126     if (theWallToRemove.dir == 2) cout << 'N' << endl;
            127     if (theWallToRemove.dir == 4) cout << 'E' << endl;
            128     if (theWallToRemove.dir == 8) cout << 'S' << endl;
            129 
            130     return 0;
            131 }
            132 
            国产69精品久久久久99尤物| 久久亚洲私人国产精品vA| 久久精品中文騷妇女内射| 久久人人爽人人爽人人片AV不| 久久无码人妻一区二区三区| 午夜天堂av天堂久久久| 国产精品久久久亚洲| 久久福利片| 囯产极品美女高潮无套久久久| 欧洲成人午夜精品无码区久久| 久久91精品国产91久久麻豆| 久久久久国产亚洲AV麻豆| 久久91精品国产91| 国产精品久久波多野结衣| 久久久免费观成人影院| 国内精品综合久久久40p| 99精品久久精品一区二区| 久久露脸国产精品| 97久久超碰国产精品旧版| 久久国产AVJUST麻豆| 中文字幕久久欲求不满| 久久狠狠爱亚洲综合影院| 久久精品一区二区三区中文字幕 | 国内精品九九久久久精品| 久久嫩草影院免费看夜色| 精品久久久久久国产91| 欧美一区二区三区久久综合| 香蕉久久夜色精品国产2020| 久久精品国产第一区二区| 色综合久久中文综合网| 蜜臀av性久久久久蜜臀aⅴ麻豆| 热综合一本伊人久久精品| 久久er国产精品免费观看2| 日韩人妻无码一区二区三区久久99| 久久国产精品国产自线拍免费| 亚洲欧洲日产国码无码久久99| 久久久午夜精品| 久久国产AVJUST麻豆| 久久久精品人妻一区二区三区蜜桃| 日本欧美国产精品第一页久久| 久久综合九色综合欧美就去吻|