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

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

            Section 1.5 - Checker Challenge

            Posted on 2009-03-24 20:44 superman 閱讀(104) 評(píng)論(0)  編輯 收藏 引用 所屬分類: USACO
              1 #include <iostream>
              2 
              3 using namespace std;
              4 
              5 bool C[50], A[50], B[50];
              6 bool * x = C + 25* LR = A + 25* RL = B + 25;
              7 
              8 int n;
              9 int cnt;
             10 
             11 void search(int i, int pos[])
             12 {
             13     if (cnt == 3)
             14         return;
             15     if (i == n)
             16     {
             17         cnt++;
             18         for (int k = 0; k < n; k++)
             19             cout << pos[k] + 1 << (k == n - 1 ? '\n' : ' ');
             20         return;
             21     }
             22 
             23     for (int j = 0; j < n; j++)
             24         if (x[j] == false)
             25         {
             26             pos[i] = j;
             27 
             28             int k;
             29             for (k = 0; k < i; k++)
             30                 if (abs(i - k) == abs(pos[i] - pos[k]))
             31                     break;
             32 
             33             if (k == i)
             34             {
             35                 x[j] = true;
             36 
             37                 search(i + 1, pos);
             38 
             39                 x[j] = false;
             40             }
             41         }
             42 }
             43 
             44 void search_odd(int i, const int x0, const int x1)
             45 {
             46     if (i == n)
             47     {
             48         if (x0 == x1)
             49             cnt += 1;
             50         else
             51             cnt += 8;
             52         return;
             53     }
             54     if (i == x0 || i == x1)
             55     {
             56         search_odd(i + 1, x0, x1);
             57         return;
             58     }
             59     for (int j = 0; j < n; j++)
             60         if (x[j] || LR[i - j] || RL[i + j])
             61             ;
             62         else
             63         {
             64             x[j] = LR[i - j] = RL[i + j] = true;
             65 
             66             search_odd(i + 1, x0, x1);
             67 
             68             x[j] = LR[i - j] = RL[i + j] = false;
             69         }
             70 }
             71 
             72 void search_even(int i)
             73 {
             74     if (i == n)
             75     {
             76         cnt += 2;
             77         return;
             78     }
             79 
             80     int t = (i ? n : n / 2);
             81     for (int j = 0; j < t; j++)
             82         if (x[j] || LR[i - j] || RL[i + j])
             83             ;
             84         else
             85         {
             86             x[j] = LR[i - j] = RL[i + j] = true;
             87 
             88             search_even(i + 1);
             89 
             90             x[j] = LR[i - j] = RL[i + j] = false;
             91         }
             92 }
             93 
             94 int main()
             95 {
             96     freopen("checker.in""r", stdin);
             97     freopen("checker.out""w", stdout);
             98 
             99     cin >> n;
            100 
            101     int pos[13];
            102     search(0, pos);
            103 
            104     for (int i = -+ 1; i < n; i++)
            105         LR[i] = false;
            106     for (int i = 0; i <= 2 * n - 2; i++)
            107         RL[i] = false;
            108 
            109     cnt = 0;
            110     if (n % 2 == 0)
            111         search_even(0);
            112     else
            113     {
            114         int x0, y0, x1, y1;
            115 
            116         x0 = n / 2, y1 = n / 2;
            117         for (x1 = 0; x1 < n / 2 - 1; x1++)
            118             for (y0 = x1 + 1; y0 < n / 2; y0++)
            119                 if (abs(x0 - x1) != abs(y0 - y1))
            120                 {
            121                     x[y0] = x[y1] = true;
            122                     LR[x0 - y0] = RL[x0 + y0] = true;
            123                     LR[x1 - y1] = RL[x1 + y1] = true;
            124 
            125                     search_odd(0, x0, x1);
            126 
            127                     x[y0] = x[y1] = false;
            128                     LR[x0 - y0] = RL[x0 + y0] = false;
            129                     LR[x1 - y1] = RL[x1 + y1] = false;
            130                 }
            131         x[n / 2= LR[0= RL[n - 1= true;
            132         search_odd(0, n / 2, n / 2);
            133         x[n / 2= LR[0= RL[n - 1= false;
            134     }
            135 
            136     cout << cnt << endl;
            137 
            138     return 0;
            139 }
            140 
            亚洲欧美日韩久久精品| 亚洲AV成人无码久久精品老人| 久久久WWW免费人成精品| 91久久香蕉国产熟女线看| 久久精品成人免费国产片小草 | 久久se精品一区精品二区| 久久99久久成人免费播放| 少妇久久久久久久久久| 久久久久九国产精品| 久久久亚洲欧洲日产国码aⅴ| 久久久久久久综合综合狠狠| 亚洲AV无码久久精品成人| 国产免费久久久久久无码| 亚洲中文字幕无码久久2017 | 草草久久久无码国产专区| 一本一本久久A久久综合精品 | 亚洲色欲久久久综合网| 精品久久久久中文字幕一区| 狠狠色丁香久久婷婷综合五月| 青青热久久国产久精品 | 久久91精品国产91久| 麻豆精品久久精品色综合| 超级97碰碰碰碰久久久久最新| 88久久精品无码一区二区毛片| 欧美丰满熟妇BBB久久久| 欧美日韩精品久久久久| 国产精品国色综合久久| 亚洲乱码日产精品a级毛片久久| 欧美激情精品久久久久| 久久精品国产亚洲AV无码娇色| 国产精品99久久久久久宅男小说 | 少妇内射兰兰久久| 亚洲国产精品无码久久久不卡| 伊人久久成人成综合网222| 久久伊人色| 久久精品国产欧美日韩| 久久久久亚洲AV无码专区网站| 激情综合色综合久久综合| 国内精品久久久久久久亚洲| 国产成人无码精品久久久免费| 欧美激情精品久久久久|