答案,答案,答案,答案,答案,答案...
2025-04-25 20:35:18
发布于:广东
4阅读
0回复
0点赞
#include<cstdio>
#define rg register
int n,t,w,a;
int root,cnt,res;
int sg[2][400007],rt[400007],mrk[400007];
inline int SG(int x)
{
return ((x=n/(n/x))>root)?sg[1][n/x]:sg[0][x];
}
inline void prework()
{
for(rg int i=1,j;i<=n;i=j+1)
{
j=n/(n/i);rt[++cnt]=j;
}
++cnt;
while(--cnt)
{
int x=rt[cnt],psg=0,rsg=1;mrk[psg]=cnt;
for(rg int i=x+x,j;i<=n;i=j+x)
{
j=n/(n/i)/x*x,mrk[psg^SG(j)]=cnt;
((j-i)/x&1^1)&&(psg^=SG(j));
}
while(mrk[rsg]==cnt)++rsg;
(x>root)?sg[1][n/x]=rsg:sg[0][x]=rsg;
}
}
int main()
{
scanf(" %d %d",&n,&t);
while(root*root<=n)++root;--root;
prework();
while(t--)
{
scanf(" %d",&w);res=0;
while(w--)scanf(" %d",&a),res^=SG(a);
printf("%s\n",res?"Yes":"No");
}
return 0;
}
这里空空如也
有帮助,赞一个