先说一下题意:
首先给你一个n,然后给你n个数,
这n个数,是你可以选择的操作,就是你每次可以连续取的石子数;
然后给你一个m,表示有m个k,每个k表示有k个连续的石子,
每次进行操作,每次只能连续移动n个数中的值,问谁最后不可以取;
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int num=1e3+10;
int sg[num];
int vis[num],t;
int a[num];
int n,k;
void getsg(void)
{
memset(vis,0,sizeof(vis));
t=0;
int L,R;
for(int i=1;i<=num-10;i++)
{
++t;
for(int j=1;j<=n&&a[j]<=i;j++)
{
L=0;R=a[j];
while(R<=i)
{
vis[sg[L]^sg[i-R]]=t;
L++;R++;
}
}
for(int j=0;;j++)
{
if(vis[j]!=t){
sg[i]=j;break;
}
}
}
return ;
}
void read_(void)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
n=unique(a+1,a+n+1)-(a+1);
return ;
}
int main()
{
int m,k;
while(scanf("%d",&n)!=EOF)
{
read_();
getsg();
scanf("%d",&m);
while(m--)
{
scanf("%d",&k);
printf(sg[k]?"1\n":"2\n");
}
}
return 0;
}