# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1252357 | anfi | 선물 (IOI25_souvenirs) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
pair<vector<int>, ll> transaction(ll M) {
cout << M << "\n" << flush;
int k; ll R;
cin >> k >> R;
vector<int> L(k);
for(int i = 0; i < k; i++) cin >> L[i];
return {L, R};
}
int main(){
int N;
ll P0;
cin >> N >> P0;
vector<ll> P(N);
P[0] = P0;
ll sum_known = P0;
for(int i = 1; i < N; i++){
ll lo = 1, hi = P0 - 1, ans = 1;
while(lo <= hi){
ll mid = (lo + hi) >> 1;
ll M = sum_known + mid - 1;
auto [L, R] = transaction(M);
bool got_i = false;
for(int t : L) if(t == i) { got_i = true; break; }
if(got_i){
ans = mid;
hi = mid - 1;
} else {
lo = mid + 1;
}
}
P[i] = ans;
sum_known += P[i];
}
for(int i = 1; i < N; i++){
for(int cnt = 0; cnt < i; cnt++){
transaction(P[i]);
}
}
return 0;
}