记录编号 161146 评测结果 AAAAAAAAAA
题目名称 [HAOI 2015]数组游戏 最终得分 100
用户昵称 GravatarChenyao2333 是否通过 通过
代码语言 C++ 运行时间 1.912 s
提交时间 2015-05-01 20:59:37 内存使用 1.16 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
const int L_N=70000;
int ni[L_N],sg[L_N],nn;
int nxt[L_N];
bool vis[L_N];
int N;
int main(){

	freopen("haoi2015_t3.in","r",stdin);
	freopen("haoi2015_t3.out","w",stdout);
	scanf("%d",&N);
	for(int i=1;i<=N;i=N/(N/i)+1){
		ni[++nn]=N/i;
		//printf("%d\n",N/i);
	}
	reverse(ni+1,ni+1+nn);
	for(int k=1;k<=nn;k++){
		int n=ni[k];
		int mx=0,now=0; vis[0]=true;
		int p=k-1, st=2;
		while(st<=n){
			int nst=n/st;
			while(nst<ni[p]) p--;
			p=nxt[p];
			int ed=n/ni[p];
			
			int tmp=now^sg[p];
			mx=max(tmp,mx);
			vis[tmp]=true;
			
			if((ed-st+1)&1) now^=sg[p];
			
			st=ed+1;
		}
		
		bool ok=false;
		for(int i=0;i<=mx+1;i++){
			if(!ok && !vis[i]) sg[k]=i, ok=true;
			vis[i]=false;
		}
		if(sg[k]==sg[k-1]) nxt[k]=nxt[k-1];
		else nxt[k]=k;
		
		//printf("n=%d sg=%d\n",n,sg[k]);
	}

	int T; scanf("%d",&T);
	for(int t=1;t<=T;t++){
		int n;scanf("%d",&n);
		int s=0;
		for(int i=1;i<=n;i++){
			int x;scanf("%d",&x);
			x=N/x;
			x=lower_bound(ni+1,ni+1+nn,x)-ni;
			s^=sg[x];
		}
		printf(s?"Yes\n":"No\n");
	}
	return 0;
}