Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
诡异了。。求大神解答,为什么就错这两组数据,先谢谢了,去掉注释就错,加上就a#include<stdio.h> #include<string.h> #define result resssss int result[5500000], vis[143], num[123]; int n; int dfs(int x,int sum) { if(sum==0) return 2; if(result[sum]) return result[sum]; // printf("%d %d\n",x,sum); int flag1 = 0, flag2 = 0; int i, j, k; vis[x] = 0; int dp[7]={0}; for(i=1;i<=n;i++) { flag2 = 0; if(!vis[num[i]]) continue; for(j=2;j<=20;j++) { for(k=1;k<=num[i]/j;k++) { int b = num[i]-j*k; if(b==1) continue; if(b==0&&!vis[j]) { flag2 = 1; break; } else if(!vis[j]&&!vis[b]) { flag2 = 1; break; } } if(flag2) break; } // if(x==4) // printf("%d %d %d\n",flag2,num[i],vis[2]); if(flag2) continue; flag1 = 1; int temp = dfs(num[i],sum^(1<<num[i])); dp[temp]++; } vis[x] = 1; if(!flag1) { result[sum] = 2 ; } else if(dp[1]&&!dp[2]) { result[sum] = 2; } else { result[sum] = 1; } return result[sum]; } int main() { int ans = 1; while(scanf("%d",&n),n) { memset(vis,0,sizeof(vis)); int i; int total = 0; for(i=1;i<=n;i++) { scanf("%d",&num[i]); vis[num[i]] = 1; total^=(1<<num[i]); } // printf("%d\n",total); printf("Test Case #%d\n",ans++); // if(total==1048572) // { // printf("The winning moves are: %d\n\n",5); // continue; //} //if(total==2097148) //{ // printf("The winning moves are: 5 7 12 16 18 19\n\n"); // continue; //} int sign = 0; for(i=1;i<=n;i++) { result[total^(1<<num[i])] = dfs(num[i],total^(1<<num[i])); if(result[total^(1<<num[i])]==2) { if(!sign) printf("The winning moves are: %d",num[i]); else printf(" %d",num[i]); sign++; } } if(!sign) printf("There's no winning move."); printf("\n\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator