时间回到昨天。
今天学了一个超丧的东西——博弈论
倒是挺有趣的。
Treblecross(UVA_10561)
这题细节很多,de了一天的bug
话说博弈论的代码不是都不超过50行的吗、、、、
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int sg[201],used[201],T,ans,hh[201],len;char c[201]; void init(int n){ memset(sg,0,sizeof(sg)); sg[1]=sg[2]=sg[3]=1; for(int i=4;i<=n;i++){ memset(used,0,sizeof(used)); for(int j=1;j<=(i+1)/2;j++){ int tmp=sg[i-j-2]; if(j>3)tmp^=sg[j-3]; used[tmp]=1; } for(int j=0;j<=n;j++)if(!used[j]){sg[i]=j;break;} } } int can(int n){ for(int i=n-2;i<=n+2;i++){ if(i<0||i>=len)continue; if(c[i]==‘X‘)return 0; } return 1; } void print(){ puts("WINNING");int t=0; for(int i=0;i<len;i++)if(hh[i]){if(t)printf(" ");printf("%d",i+1);t=1;} puts(""); } int main() { init(200);scanf("%d",&T); while(T--){ scanf("%s",c); ans=0;memset(hh,0,sizeof(hh)); len=strlen(c);bool win=0; for(int i=0;i<len-2;i++){ if(c[i]==‘X‘){ if(c[i+1]==‘X‘)hh[i+2]=1,win=1; if(c[i+2]==‘X‘)hh[i+1]=1,win=1; }if(c[i+1]==‘X‘&&c[i+2]==‘X‘)hh[i]=1,win=1; } if(win){print();continue;} for(int i=0;i<len;i++){ if(!can(i))continue; int tmp=0,last=-3; for(int j=0;j<len;j++) if(c[j]==‘X‘||j==i){ if(j-last-5>0)tmp^=sg[j-last-5]; last=j;//printf("i%d j%d t%d\n",i+1,j+1,tmp); } if(len-last>3)tmp^=sg[len-last-3];//printf("i%d t%d\n",i+1,tmp); if(!tmp)hh[i]=1,win=1; } if(win)print(); else puts("LOSING\n"); } return 0; }
ENimEN(UVA_11892)
这题就很水了,还有下题
#include<iostream> #include<cstdio> using namespace std; inline int read(){ int num=0,t=1;char c=getchar(); while(c>‘9‘||c<‘0‘){if(c==‘-‘)t=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘){num=(num<<3)+(num<<1)+c-‘0‘;c=getchar();} return num*t; } int main() { int T=read(); while(T--){ int n=read(),a,sum=0; for(int i=1;i<=n;i++){ a=read();if(a==1)sum++; } if(sum==n&&sum%2==0)puts("piloop"); else puts("poopi"); } return 0; }
A Funny Game(poj_2484)
#include<cstdio> int main(){ while(1){ int n;scanf("%d",&n);if(!n)break; if(n<3)puts("Alice"); else puts("Bob"); } return 0; }
本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。
时间: 2024-12-26 08:54:55