/*这个题目和那个连续线段的sg游戏很像。也是要连续的取值。但是这样堆会增加。所以则求sg的时候,要考虑各种子情况。没看懂题目,有点纠结啊*/#include#include int S[3];int M;int N;int sg[1010];bool used[1010];int dfs(int n){ int& cur = sg[n]; if( cur!=-1 ) return cur; memset(used,0,sizeof(used)); for(int i=0;i<3;i++) { if(n>=S[i]) { for(int j=0;j<=n-S[i];j++) { used[ dfs(j)^dfs(n-S[i]-j) ] =1; } } } for(int i=0;;i++) { if( !used[i]) { cur = i; break; } } return cur;}int main(){ while(scanf("%d %d%d",S,S+1,S+2)==3) { scanf("%d",&M); memset(sg,-1,sizeof(sg)); sg[0] = 0; for(int i=0;i