QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#185552#4884. Battleship: New RulesCrysflyTL 0ms0kbC++201.5kb2023-09-22 11:37:082023-09-22 11:37:09

Judging History

你现在查看的是最新测评结果

  • [2023-09-22 11:37:09]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2023-09-22 11:37:08]
  • 提交

answer

// what is matter? never mind.
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
inline int read()
{
	char c=getchar();int x=0;bool f=0;
	for(;!isdigit(c);c=getchar())f^=!(c^45);
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
	if(f)x=-x;return x;
}

#define fi first
#define se second
#define pb push_back
#define mkp make_pair
typedef pair<int,int>pii;
typedef vector<int>vi;

#define maxn 400005
#define inf 0x3f3f3f3f

int n;
int vis[1005][1005];

int q(int x,int y){
	if(x<1||y<1||x>=n||y>=n)return 0;
	if(~vis[x][y])return vis[x][y];
	cout<<"? "<<x<<" "<<y<<endl;
	cin>>vis[x][y]; return vis[x][y];
}
int Q(int x,int y){
	For(i,0,1)For(j,0,1)if(q(x+i,y+j))return 1;
	return 0;
}

bool chk(int x1,int x2,int y1,int y2){
	int res=0;
	For(i,x1,x2)For(j,y1,y2)res^=Q(i,j);
	return res;
}

void solve(int x1,int x2,int y1,int y2){
	if(x1==y1&&x2==y2){
		cout<<x1-1<<" "<<y1-1<<endl;
		return;
	}
	if(x2-x1>y2-y1){
		int mid=x1+x2>>1;
		if(chk(x1,mid,y1,y2))solve(x1,mid,y1,y2);
		else solve(mid+1,x2,y1,y2);
	}else{
		int mid=y1+y2>>1;
		if(chk(x1,x2,y1,mid))solve(x1,x2,y1,mid);
		else solve(x1,x2,mid+1,y2);
	}
}

void work()
{
	cin>>n;++n;
	For(i,0,n)For(j,0,n)vis[i][j]=-1;
	if(n%2==0){
		cout<<-1<<" "<<-1<<endl;
		return;
	}
	solve(1,1,n,n);
}

signed main()
{
	int T;cin>>T;
	while(T--){
		work();
		int x;cin>>x;
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Time Limit Exceeded

input:

2
3

output:

-1 -1

result: