代码求调,悬两关
查看原帖
代码求调,悬两关
760171
Binah_cyc楼主2024/8/8 19:32

rt

#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define push_back emplace_back
int n,place,a,b,x,y,q;
int ask[1055][1055];
signed main()
{
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>n;
	if(n&1)
	{
		int l=1,r=n;
		while(l<r)
		{
			int mid=(l+r)/2;
			cout<<'?'<<' '<<1<<' '<<mid<<' '<<2<<'\n'<<flush;
			cin>>x;
			cout<<'?'<<' '<<mid+1<<' '<<n<<' '<<2<<'\n'<<flush;
			cin>>y;
			a=x*2-mid,b=y*2-(n-mid);
			if(a+1==b) l=mid+1;
			else r=mid;
		}
		cout<<'!'<<' '<<l<<flush;
	}
	else
	{
		int l=1,r=n;
		while(l<=r)
		{
			int mid=(l+r)/2;
			if(l+1==r)
			{
				if(!place)
				{
					if(l!=1)
					{
						cout<<'?'<<' '<<1<<' '<<l<<' '<<n<<'\n'<<flush;
						cin>>x;
						if(x==1) cout<<'!'<<' '<<l<<'\n'<<flush;
						else cout<<'!'<<' '<<l+1<<'\n'<<flush;
					}
					else
					{
						cout<<'?'<<' '<<2<<' '<<n<<' '<<n<<'\n'<<flush;
						cin>>x;
						if(x==1) cout<<'!'<<' '<<2<<'\n'<<flush;
						else cout<<'!'<<' '<<1<<'\n'<<flush;
					}
				}
				else
				{
					if(l!=1)
					{
						cout<<'?'<<' '<<1<<' '<<l<<' '<<2<<'\n'<<flush;
						cin>>x;
						int a=x*2-l;
						if(place==1) a--;
						else if(place==n) ask[l+2][n]--;
						if(a==ask[l+2][n]) cout<<'!'<<' '<<l+1<<flush,exit(0);
						else cout<<'!'<<' '<<l<<flush,exit(0);
					}
					else
					{
						cout<<'?'<<' '<<2<<' '<<n<<' '<<2<<'\n'<<flush;
						cin>>x;
						if(place==n) ask[3][n]--;
						if(x==ask[3][n]) cout<<'!'<<' '<<1<<'\n'<<flush;
						else cout<<'!'<<' '<<2<<'\n'<<flush;
					}
				}
				return 0;
			}
			else
			{
				cout<<'?'<<' '<<1<<' '<<mid<<' '<<2<<'\n'<<flush;
				cin>>x;
				cout<<'?'<<' '<<mid+1<<' '<<n<<' '<<2<<'\n'<<flush;
				cin>>y;
				a=x*2-mid,b=y*2-(n-(mid+1)+1);
				if(a==b&&(!place))
				{
					if(mid==1)
					{
						cout<<'?'<<' '<<2<<' '<<n<<' '<<n<<'\n'<<flush;
						cin>>q;
						if(q==1) place=1;
						else place=n;
					}
					else
					{
						cout<<'?'<<' '<<1<<' '<<mid<<' '<<n<<'\n'<<flush;
						cin>>q;
						if(q==2) place=1;
						else place=n;
					}
				}
				ask[1][mid]=a,ask[mid+1][n]=b;
				if(place==1) a--;
				else if(place==n) b--;
				if(a>b) r=mid;
				else l=mid+1;
			}
		}
		cout<<'!'<<' '<<l<<flush;
	}
	return 0;
}
2024/8/8 19:32
加载中...