社区讨论

75 pts TLE on #47 求调

P14134【MX-X22-T5】「TPOI-4E」Get MiN? Get MeX!参与者 5已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mhj3kx4y
此快照首次捕获于
2025/11/03 20:09
4 个月前
此快照最后确认于
2025/11/03 20:09
4 个月前
查看原帖
CPP
#include<iostream>
#include<vector>

using namespace std;

int n, x;
bool fg = 1;
vector<int> v1, v2;

void check(int l, int r){
	if(l == r){
		cout << "! " << v1[l];
		return;
	}
	int mid = (l + r) / 2;
	cout << "? 1 " << mid-l+1;
	for(int i = l; i <= mid; i++) cout << ' ' << v1[i];
	cout << endl;
	cin >> x;
	if(x == 1) check(l, mid);
	else check(mid+1, r);
}

int main(){
	cin >> n;
	if(n == 1){
		cout << "! 1" << endl;
		return 0;
	}
	for(int i = 1; i <= n; i++) v1.push_back(i);
	int w;
	while(v1.size()){
		int mid1 = v1.size() / 3, q1;
		int mid2 = v1.size()*2 / 3, q2;
		cout << "? 1 " << mid1+1;
		for(int i = 0; i <= mid1; i++) cout << ' ' << v1[i];
		cout << endl;
		cin >> q1;
		if(q1 == 1){
			w = mid1;
			break;
		}
		cout << "? 1 " << v1.size()-mid2;
		for(int i = mid2; i < v1.size(); i++) cout << ' ' << v1[i];
		cout << endl;
		cin >> q2;
		if(q2 == 1){
			w = mid2-1;
			break;
		}
		if(q1 == q2){
			for(int i = 0; i <= mid1; i++) v2.push_back(v1[i]);
			for(int i = mid2; i < v1.size(); i++) v2.push_back(v1[i]);
		}
		else if(q1 < q2){
			for(int i = 0; i <= mid2; i++) v2.push_back(v1[i]);
		}
		else{
			for(int i = mid1; i < v1.size(); i++) v2.push_back(v1[i]);
		}
		v1.clear();
		v1 = v2;
		v2.clear();
	}
	cout << "? 2 " << w+1;
	for(int i = 0; i <= w; i++) cout << ' ' << v1[i];
	cout << endl;
	cin >> x;
	if(x == -1) check(0, w);
	else check(w+1, v1.size()-1);
	return 0;
}
//3 4 2 0 1 5 6 7 8 9

回复

7 条回复,欢迎继续交流。

正在加载回复...