全部评论 1

  • 弄错了!
    我来帮你吧!
    看!

    #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;
    }
    

    好啦!

    看吧

    2025-01-26 来自 陕西

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页