QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#882794#9734. Identify ChordjiamengtongTL 1ms3328kbC++141.2kb2025-02-05 11:28:402025-02-05 11:28:41

Judging History

This is the latest submission verdict.

  • [2025-02-05 11:28:41]
  • Judged
  • Verdict: TL
  • Time: 1ms
  • Memory: 3328kb
  • [2025-02-05 11:28:40]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
int n;
int query(int x, int y)
{
	cout << "? " << x % n + 1 << ' ' << y % n + 1 << endl;
	int d;
	cin >> d;
	return d;
}
void solve()
{
	cin >> n;
	int x = 0, y = n / 2, d;
	for(int t = 0; ; t ^= 1)
	{
		d = query(x, y);
		if(d < n / 2) break;
		if(n & 1) x += (t == 1), y += (t == 0);
		else x++, y++;
	}
	int dis = query((x + n - 1) % n, y), X, disy;
	if(dis < d)
	{
		int l = 1, r = n / 2, ans = 1, mid;
		while(l <= r)
		{
			mid = (l + r) >> 1;
			if(query((x + n - mid) % n, y) == d - mid) ans = mid, l = mid + 1;
			else r = mid - 1;
		}
		X = (x + n - ans) % n;
		disy = d - ans - 1;
	}
	else
	{
		dis = query((x + 1) % n, y);
		if(dis < d)
		{
			int l = 1, r = n / 2, ans = 1, mid;
			while(l <= r)
			{
				mid = (l + r) >> 1;
				if(query((x + ans) % n, y) == d - mid) ans = mid, l = mid + 1;
				else r = mid - 1;
			}
			X = (x + ans) % n;
			disy = d - ans - 1;
		}
		else X = x, disy = d - 1;
	}
	int Y = (y + disy) % n;
	if(query(X, Y) != 1) Y = (y + n - disy) % n;
	cout << "! " << X + 1 << ' ' << Y + 1 << endl;
	cin >> X;
}
signed main()
{
	int T;
	cin >> T;
	while(T--) solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3328kb

input:

2
6
2
2
1
1
1
1
1
4
1
1
1
1
1

output:

? 1 4
? 6 4
? 2 4
? 2 4
? 2 4
? 2 4
! 2 4
? 1 3
? 4 3
? 2 3
? 1 3
! 1 3

result:

ok ok (2 test cases)

Test #2:

score: -100
Time Limit Exceeded

input:

1000
15
5
6
4
4
4
4
6
-1

output:

? 1 8
? 15 8
? 2 8
? 2 8
? 2 8
? 2 8
? 2 11
! 2 5

result: