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 |
Re: 这神奇的机制,我也是醉了。下附三份代码,请君感受神奇的RE判定In Reply To: 这神奇的机制,我也是醉了。下附三份代码,请君感受神奇的RE判定 Posted by:fzfzfz at 2015-01-12 11:47:39 其实是在dfs里开的数组过大,导致爆栈了,至于你的dfs深度或许和搜索顺序有关 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 105 #define M 10100 using namespace std; int S,s[N]; int sg[M]; int SG(int x) { int i; if(sg[x]+1)return sg[x]; bool vis[M]={0}; for(i=1;i<=S&&s[i]<=x;i++)vis[SG(x-s[i])]=true; for(i=0;vis[i];i++); return sg[x]=i; } int n,m; int main() { // freopen("test.in","r",stdin); int i,k,g; while(scanf("%d",&S),S)// 数据组数A { for(i=1;i<=S;i++)scanf("%d",&s[i]); sort(s+1,s+S+1); // s : 每次可以取的石子数量集合 memset(sg,-1,sizeof(sg)),sg[0]=0; for(int i=1;i<=10000;i++)SG(i); for(scanf("%d",&g);g--;) // 数据组数B { for(k=0,scanf("%d",&n);n--;) // n堆石子 { scanf("%d",&m); // 该堆石子的个数 k^=sg[m]; } if(k)putchar('W'); else putchar('L'); } puts(""); } return 0; } 只要改成这样就可以了,还有一个需要注意的地方,数组开大是一个好习惯,但你的数组过大导致常数比较大有可能tle,所以我给你该小了… Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator