题解,求关注
2025-04-25 20:32:41
发布于:广东
10阅读
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;
}
全部评论 2
还挺幽默的
2025-07-25 来自 浙江
0复制别人的题解好玩吗
2025-07-17 来自 浙江
0那为啥您被禁言了?再说,我们只是参考,不是所有人都会去直接抄。谢谢。
2025-07-22 来自 北京
0
有帮助,赞一个