| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1299398 | TrinhKhanhDung | 동굴 (IOI13_cave) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "cave.h"
using namespace std;
int tryCombination(int S[]){
int n = sizeof(S) / 2;
cerr << n << '\n';
for(int i = 0; i < n; i++){
cout << S[i] << ' ';
}
cout << endl;
int x; cin >> x;
return x;
}
void answer(int S[], int D[]){
int n = sizeof(S) / 2;
for(int i = 0; i < n; i++){
cout << S[i] << ' ';
}
cout << endl;
for(int i = 0; i < n; i++){
cout << D[i] << ' ';
}
cout << endl;
}
void exploreCave(int n){
int S[n], D[n];
for(int i = 0; i < n; i++){
S[i] = 0;
D[i] = -1;
}
vector<int> a(n);
iota(a.begin(), a.end(), 0);
for(int t = 0; t < n; t++){
for(int x: a){
S[x] = 0;
}
int x = tryCombination(S);
if(x != -1 && x <= t){
for(int x: a){
S[x] = 1;
}
}
int l = 0, r = (int)a.size() - 1;
while(l < r){
int m = (l + r) >> 1;
for(int i = l; i <= m; i++){
S[a[i]] = !S[a[i]];
}
int x = tryCombination(S);
if(x != -1 && x <= t){
for(int i = l; i <= m; i++){
S[a[i]] = !S[a[i]];
}
r = m;
}
else{
l = m + 1;
}
}
x = a[r];
D[t] = x;
vector<int> b;
for(int y: a){
if(y != x){
b.push_back(y);
}
}
a = b;
}
answer(S, D);
}
//int main(){
// ios_base::sync_with_stdio(0); cin.tie(0);
//
// exploreCave(4);
//
// return 0;
//}
