| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1310867 | dimitri.shengelia | 동굴 (IOI13_cave) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
//#include "cave.h"
using namespace std;
int tryCombination ( int S[] );
void answer ( int S[], int D[] );
void exploreCave( int N ) {
int n = N;
int a[n], b[n];
vector <int> v;
for ( int i = 0; i < n; i++ ) {
v.push_back( i );
}
int k;
int l, r;
for ( int i = 0; i < n; i++ ) {
for ( auto x : v ) {
a[x] = 0;
}
int k = tryCombination( a );
if ( k == -1 or k > i ) {
k = 0;
} else {
k = 1;
}
l = -1, r = v.size() + 1;
int z = 0;
while ( l < r and z++ < 15 ) {
int m = ( l + r ) / 2;
for ( int j = m + 1; j < (int)v.size(); j++ ) {
a[v[j]] = 1 - k;
}
int k1 = tryCombination( a );
if ( k1 == -1 or k1 > i ) {
r = m;
} else {
l = m + 1;
}
for ( int j = m + 1; j < (int)v.size(); j++ ) {
a[v[j]] = k;
}
}
a[v[r]] = k;
b[v[r]] = i;
v.erase( v.begin() + r );
}
answer( a, b );
return;
}
