码迷,mamicode.com
首页 > 其他好文 > 详细

【BZOJ】【2940】【POI2000】条纹

时间:2015-02-28 16:10:19      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

博弈论

  一开始想成S-Nim了……后来发现不一样= =石子是一定得取的,但是这个铺条纹就像Crosses and Crosses一样,是可以铺到中间,左右留下空隙但是对手无处可放的……

  所以就是两道题的方法结合一下咯~

  

技术分享
 1 /**************************************************************
 2     Problem: 2940
 3     User: Tunix
 4     Language: C++
 5     Result: Accepted
 6     Time:60 ms
 7     Memory:1276 kb
 8 ****************************************************************/
 9  
10 //BZOJ 2940
11 #include<cstdio>
12 #include<cstring>
13 #include<iostream>
14 #define F(i,j,n) for(int i=j;i<=n;++i)
15 int getint(){
16     int v=0,sign=1; char ch=getchar();
17     while(!isdigit(ch)) {if(ch==-) sign=-1; ch=getchar();}
18     while(isdigit(ch))  {v=v*10+ch-0; ch=getchar();}
19     return v*sign;
20 }
21 const int N=1010,INF=~0u>>2;
22  
23 int a[4],SG[N];
24 bool mark[N];
25 int main(){
26     F(i,1,3) a[i]=getint();
27     int n=getint();
28     F(i,1,1000){
29         memset(mark,0,sizeof mark);
30         F(j,1,3)
31             for(int k=0;k<=i-a[j]-k;++k)
32                 mark[SG[k]^SG[i-a[j]-k]]=1;
33         F(j,0,i) if (!mark[j]) {SG[i]=j; break;}
34     }
35     F(i,1,n) {
36         printf("%d",SG[getint()] ? 1 : 2);
37         if (i!=n) printf("\n");
38     }
39     return 0;
40 }
View Code

 

【BZOJ】【2940】【POI2000】条纹

标签:

原文地址:http://www.cnblogs.com/Tunix/p/4305608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!