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

            Why so serious? --[NKU]schindlerlee

            2010年1月31日星期日.ural1060-pku1753 枚舉狀態

            2010年1月31日星期日.ural1060-pku1753
            Neerc2000中的一題。

            題目要求:

            給出一個4×4的棋盤的黑白狀態,求最少需要多少次翻轉(每次翻轉會改變當前格和周圍四個格的
            狀態),使棋盤變成全黑或者全白。

            貌似是這套題中最水的一題,分析一下復雜度,發現即使完全枚舉狀態,復雜度也是可以接受的,
            然后就枚舉吧。

            我的存儲方法是用一個int型表示棋盤狀態,黑1白0,將四行按順序連起來,寫成一個16位整數。


             1 
             2 const int inf = 0x7fffffff;
             3 #define bin(x) (1 <<(x))
             4 int mask = bin(16- 1;
             5 int addr(const int &x,const int &y)
             6 return x * 4 + y; }
             7 int grid;
             8 //http://www.shnenglu.com/schindlerlee
             9 bool flip(int press)
            10 {
            11   int g = grid,i;
            12   for (i = 0;i < 16;i++) {
            13       if(press & bin(i)) {
            14           g ^= bin(i);
            15           g ^= bin(i + 4);
            16           g ^= bin(i - 4);
            17           if (i != 3 && i!= 7 && i != 11 && i!= 15) { g ^= bin(i+1); }
            18           if (i != 0 && i!= 4 && i != 8 && i!= 12)  { g ^= bin(i-1); }
            19       }
            20   }
            21   g &= mask;
            22   return (g == 0|| (g == mask);
            23 }
            24 
            25 int count(int x)
            26 {
            27   int res = 0;
            28   while(x > 0) {
            29       res += x & 1;
            30       x >>= 1;
            31   }
            32   return res;
            33 }
            34 
            35 void ckmin(int & res,int x) { if(x < res) res = x; }
            36 int main()
            37 {
            38   char s[16];
            39   int i,j;
            40   for (i = 0;i < 4;i++) {
            41       scanf("%s\n",s);
            42       for (j = 0;j < 4;j++) {
            43           if(s[j] == 'b') {
            44               grid |= bin(addr(i,j));
            45           }
            46       }
            47   }
            48 
            49   int res = inf;
            50   for (i = 0;i <= mask;i++) {
            51       if (flip(i)) {
            52           //printf("i=%d\n",i);
            53           ckmin(res,count(i));
            54       }
            55   }
            56   if(res == inf) {
            57       printf("Impossible\n");
            58   }else {
            59       printf("%d\n",res);
            60   }
            61   return 0;
            62 }
            63 

            posted on 2010-01-31 23:31 schindlerlee 閱讀(1033) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告

            亚洲精品美女久久777777| 久久亚洲精品视频| 一本色道久久88综合日韩精品 | 99久久99久久久精品齐齐| 久久久久久久波多野结衣高潮 | AV色综合久久天堂AV色综合在| 老男人久久青草av高清| 久久精品一区二区影院| 亚洲狠狠婷婷综合久久蜜芽| 久久AV高清无码| 久久国产乱子伦精品免费午夜| 久久福利资源国产精品999| 久久久久久毛片免费播放| 久久国产视频网| 精品综合久久久久久888蜜芽| 久久99国产精品成人欧美| 国产偷久久久精品专区| 国产精品美女久久久网AV| 亚洲中文字幕无码一久久区| 精品国产乱码久久久久久浪潮 | 亚洲国产精品一区二区三区久久| 久久人人爽人人人人片av| 青青青青久久精品国产h| 亚洲中文字幕久久精品无码APP| 久久精品二区| 日韩精品国产自在久久现线拍| 久久国语露脸国产精品电影| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久久久99精品成人片牛牛影视| 精品久久久久久中文字幕大豆网| 国产一区二区精品久久凹凸 | 国产成年无码久久久免费| 久久se精品一区精品二区国产| 精品国产VA久久久久久久冰 | 久久综合久久综合久久综合| 青青草原精品99久久精品66| 三级三级久久三级久久| 中文字幕精品久久久久人妻| 久久精品成人欧美大片| 久久综合给合综合久久| 久久国产精品免费一区二区三区|