zoukankan      html  css  js  c++  java
  • HDU 3389

    对于这道题,我们需要从(A+B)%3==0这式子考虑。对于第一条式子,我们可以知道,只能是奇偶盒子交替转移。

    由第二条式子可知,要么是同余为0的A,B之间转移,要么是余数为1,2之间的 转移。后来仔细比对发现,同余为0的只能是一条路径(即只能在同余为0之间转移)内。对于1,2之间的转移,恰好是两条路径分别是以1,2开始的一条和以4,5盒子开始的一条。三条路径是不相交的。于是,分别是三个单独的SG游戏。

    利用梯阶博弈分别对三条路径进行求SG即可。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 const int MAX=10010;
     7 int a[MAX],n;
     8 
     9 int main(){
    10     int cas; int t=0;
    11     scanf("%d",&cas);
    12     while(++t<=cas){
    13         scanf("%d",&n);
    14         for(int i=1;i<=n;i++){
    15             scanf("%d",&a[i]);
    16         }
    17         int sum=0,cnt=-1;
    18         for(int i=3;i<=n;i+=3){
    19             cnt++;
    20             if(cnt&1)
    21             sum^=a[i];
    22         }
    23         cnt=-1;
    24         for(int i=1;i<=n;i+=5){
    25             for(int k=0;k<2&&i+k<=n;k++){
    26                 cnt++;
    27                 i+=k;
    28                 if(cnt&1)
    29                 sum^=a[i];
    30             }
    31         }
    32         cnt=-1;
    33         for(int i=4;i<=n;i+=5){
    34             for(int k=0;k<2&&i+k<=n;k++){
    35                 cnt++;
    36                 i+=k;
    37                 if(cnt&1)
    38                 sum^=a[i];
    39             }
    40         }
    41         if(sum)
    42         printf("Case %d: Alice
    ",t);
    43         else 
    44         printf("Case %d: Bob
    ",t);
    45     }
    46     return 0;
    47 }
    View Code
  • 相关阅读:
    ASP.NET初识4
    属性
    ASP.NET初识4
    ACCP6.0第九章练习
    ASP.NET初识1
    鼠标指针含义
    ASP.NET初识2
    第三部分
    ASP.NET初识3
    ASP.NET初识5
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/3776341.html
Copyright © 2011-2022 走看看