版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z591826160/article/details/83658665
Good Luck in CET-4 Everybody! [HDU - 1847]
题面
思路
看到数据范围能刷SG表,开题先推了一会后感觉可能是有循环节的。
刷完SG表之后观察规律,貌似
的情况都是先手必败,其余先手必胜
拿到结论之后,发现和bash博弈很像。每次都留给对面3的倍数的数即可。
代码
放一下刷SG表的代码吧,结论的放了也没什么意义
int const maxn=2000;
int sg[maxn];
int dfs(int u){
if(sg[u]!=-1)return sg[u];
bool get0=true;
for(int i=0;i<11;i++){
int now = 1<<i;
if(now>u)break;
get0&=dfs(u-now);
}
return sg[u]=!get0;
}
int main(){
none(sg);
int now=1;
while(now<maxn){
sg[now]=1;
now<<=1;
}
sg[0]=0;
dfs(1000);
for(int i=0;i<10;i++)
cout<<sg[i]<<endl;
}