标签:style blog color ar for 数据 sp div c
题意:
一排石头,个数是K。
有n个数,a1...an。
每人每次取石子只能取连续的x个。x属于a1...an的一个。
没法取者负。
思路:
简单的SG。但是TLE!后面加了一个优化~这个优化不好想到吧,看了别人的代码才发现的。就是把a1...an中重复的去掉!。。。
直接看代码。
代码:
int sg[1005]; int n,m,k; int a[105]; int dfs(int x){ if(sg[x]!=-1) return sg[x]; bool vis[1005]={0}; rep(i,1,n){ if(x<a[i]) break; for(int j=1;j+a[i]-1<=x;++j){ int t1=0; t1=t1^dfs(j-1); t1=t1^dfs(x-j-a[i]+1); vis[t1]=true; } } for(int i=0;;++i){ if(!vis[i]){ return sg[x]=i; } } } int main(){ while(scanf("%d",&n)!=EOF){ rep(i,1,n) scanf("%d",&a[i]); sort(a+1,a+1+n); ///去重,时间一下缩短一半,这数据.... int t1=0; int b[105]; b[0]=-1; rep(i,1,n) if(a[i]!=b[t1]) b[++t1]=a[i]; n=t1; rep(i,1,n) a[i]=b[i]; scanf("%d",&m); mem(sg,-1); while(m--){ scanf("%d",&k); if(!dfs(k)) puts("2"); else puts("1"); } } }
hdu 2999 Stone Game, Why are you always there? (简单SG,有个优化)
标签:style blog color ar for 数据 sp div c
原文地址:http://www.cnblogs.com/fish7/p/4005293.html