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

            聚精會神搞建設(shè) 一心一意謀發(fā)展
            posts - 190, comments - 17, trackbacks - 0, articles - 0
               :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            Section 2.1 - The Castle

            Posted on 2009-03-25 11:22 superman 閱讀(119) 評論(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 
            欧美熟妇另类久久久久久不卡| 国内高清久久久久久| 一本一道久久精品综合| 久久国产精品国语对白| 美女久久久久久| 久久人妻少妇嫩草AV无码专区| 国产精品久久久久久搜索| 久久亚洲欧洲国产综合| 久久免费的精品国产V∧| 国产亚洲精午夜久久久久久| 久久人人爽人人爽人人av东京热 | 99精品久久精品一区二区| 久久精品一区二区三区不卡| 久久久午夜精品| 亚洲精品高清国产一久久| 婷婷五月深深久久精品| 久久精品视屏| 久久99精品综合国产首页| 大香伊人久久精品一区二区| 国产女人aaa级久久久级| 国产精品久久久久国产A级| 久久免费看黄a级毛片| 久久久精品波多野结衣| 久久香蕉国产线看观看99| 久久综合狠狠综合久久综合88| 免费一级做a爰片久久毛片潮| 久久久久夜夜夜精品国产| 色88久久久久高潮综合影院| 性做久久久久久免费观看| 久久精品无码专区免费| 久久久久久亚洲精品不卡| 99久久亚洲综合精品成人| 久久亚洲精品中文字幕三区| 久久综合狠狠综合久久| 国内精品久久久久久99蜜桃| 久久精品黄AA片一区二区三区| 色综合久久综合中文综合网| 伊人久久大香线蕉综合影院首页| 久久婷婷五月综合色奶水99啪 | 久久综合给合久久狠狠狠97色69| 久久无码AV中文出轨人妻|