题解,求关注
2024-07-02 20:11:37
发布于:浙江
以下是题解
#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)/xx,mrk[psg^SG(j)]=cnt;
((j-i)/x&11)&&(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(rootroot<=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;
}
全部评论 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




有帮助,赞一个