求助 /dk
查看原帖
求助 /dk
194220
Moonlights楼主2020/11/1 15:35

本地写了个比较破的交互器,跑第二组数据用了 9700+9700+ 次询问。

但是交上去就 wa on 2

已经查了一天了还是没查出来 /kel

const int N=1e5+5;
int n,_,lim,num,sum,cnt,tot[N],vis[N],prime[N];

inline void sieve(int L=N-5) {
	lep(i,2,L) if(!vis[i]) {
		prime[++cnt]=i;
		for(int j=i+i;j<=n;j+=i) vis[j]=true;
	}
	lep(i,2,L) vis[i]=true;
}

inline void find_leq_sqrtn() {
	lim=sqrt(n);
	lep(i,1,cnt) if(prime[i]<=lim) printf("B %d\n",prime[i]),IN(_);
	lep(i,1,cnt) if(prime[i]<=lim)
		for(int j=prime[i];;j+=prime[i]) {
			printf("A %d\n",j),IN(_);
			if(_) num*=prime[i]; else break;
		}

	sum=1;
	lep(i,1,cnt) if(prime[i]>lim) ++sum;

	printf("A 1\n"),IN(_);
	if(_!=sum) {printf("C %d\n",num), exit(0);}
}

inline void work_geq_sqrtn() {
	int L=0;
	rep(i,cnt,1) if(prime[i]>lim) L=i;

	for(int R=0;L<=cnt;L=R+1) {
		R=min(L+98,cnt);
		lep(i,L,R) printf("B %d\n",prime[i]),IN(_),--sum;

		printf("A 1\n"),IN(_);
		if(_==sum) lep(i,L,R) {
			printf("A %d\n",prime[i]),IN(_);
			if(_) {printf("C %d\n",num*prime[i]); exit(0);}
		}
	}
	printf("C 1\n");
}

手动去掉 fflush(stdout) 了,不然显得很臃肿 /wq

2020/11/1 15:35
加载中...