• <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 1.5 - Checker Challenge

            Posted on 2009-03-24 20:44 superman 閱讀(107) 評論(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 
            久久久久婷婷| 亚洲va久久久噜噜噜久久狠狠| 国产一级做a爰片久久毛片| 日韩亚洲欧美久久久www综合网| 韩国免费A级毛片久久| 国产成人精品久久综合| 四虎影视久久久免费观看| 国产成人精品久久| 久久精品国产影库免费看| 无码任你躁久久久久久久| 久久丫精品国产亚洲av| 久久久久国产一级毛片高清板| 久久天天躁狠狠躁夜夜avapp | 亚洲欧美日韩精品久久| 久久综合久久伊人| 东京热TOKYO综合久久精品 | 久久精品无码午夜福利理论片| 久久免费精品一区二区| 久久精品国产久精国产果冻传媒 | 久久久久噜噜噜亚洲熟女综合| A级毛片无码久久精品免费| 国产一区二区精品久久凹凸| 久久亚洲美女精品国产精品| 久久夜色精品国产| 国产L精品国产亚洲区久久| 亚洲AV无一区二区三区久久| 性做久久久久久久久老女人| 国产精品亚洲综合专区片高清久久久| 久久久久久亚洲AV无码专区 | 久久久精品一区二区三区| 一本色道久久88综合日韩精品 | 国产成人无码久久久精品一| 久久久久av无码免费网| 免费一级做a爰片久久毛片潮| 久久99国产亚洲高清观看首页| 亚洲色婷婷综合久久| 一级女性全黄久久生活片免费| 欧美国产成人久久精品| 久久精品国产精品亚洲艾草网美妙| 色综合久久天天综合| 91久久福利国产成人精品|