社区讨论
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 条回复,欢迎继续交流。
正在加载回复...