【A】为什么这份代码多交几次评测结果不同?
  • 板块学术版
  • 楼主dxrS
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/22 22:07
  • 上次更新2024/9/23 12:57:01
查看原帖
【A】为什么这份代码多交几次评测结果不同?
563958
dxrS楼主2024/9/22 22:07
#include<bits/stdc++.h>
using namespace std;
bool flg[1005];
int cnt;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	string s;
	getline(cin,s);
	int p=1;
	for(int i=1;i<=1000;i+=20){
		if(i==981&&!cnt){
			for(int j=981;j<=999;++j){
				cout<<'?'<<' '<<1<<' '<<j<<endl;
				cin>>flg[j];
				flg[j]^=1;
				if(!flg[j]) ++cnt;
			}
			if(cnt<10) flg[1000]=0;
			else flg[1000]=1;
			break;
		}
		int cnt0=0,cnt1=0;
		for(int j=i+1;j<=i+19;++j){
			cout<<'?'<<' '<<i<<' '<<j<<endl;
			cin>>flg[j];
			if(flg[j]) ++cnt1;
			else ++cnt0;
		}
		if(cnt1==10||cnt0==10){
			for(int j=1;j<i;++j) flg[j]=1;
			for(int j=i+20;j<=1000;++j) flg[j]=1;
			cout<<'?'<<' '<<(i==1?21:1)<<' '<<i<<endl;
			cin>>flg[i];
			flg[i]^=1;
			for(int j=i+1;j<=i+19;++j) flg[j]^=flg[i];
			break;
		}
		if(cnt1>cnt0) flg[i]=0;
		else for(int j=i;j<=i+19;++j) flg[j]^=1;
		for(int j=i;j<=i+19;++j) if(!flg[j]) ++cnt;
		// if(cnt==10) break;
	}
	cout<<'!';
	for(int i=1;i<=1000;++i) if(!flg[i]) cout<<' '<<i;
	cout<<endl;
	return 0;
}
2024/9/22 22:07
加载中...