# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
249655 | muhammad_hokimiyon | 동굴 (IOI13_cave) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "cave.h"
#define fi first
#define se second
#define ll long long
#define dl double long
using namespace std;
const int NN = 1e9 + 7;
const int N = 2e6 + 7;
const int M = 26;
const ll mod = 1e9 + 7;
const ll inf = 1e18 + 7;
const dl rf = 1e-14;
const int B = sqrt(N);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
void exploreCave(int N)
{
vector < pair < int , int > > ans(N , {0 , 0});
vector < int > used(N , 0);
for( int i = 0; i < N; i++ ){
vector < int > s(N , 0);
for( int j = 0; j < N; j++ ){
if( used[j] )s[j] = ans[j].se;
}
for( int j = i; j < N; j++ ){
s[j] = 0;
}
int x = tryCombination(s);
if( x < i )x = 1;
else x = 0;
int l = 0 , r = N - 1;
while( l < r ){
int m = (l + r) / 2;
vector < int > qr(N , 0);
for( int j = 0; j < N; j++ ){
if( used[j] ){
qr[j] = ans[j].se;
}
}
for( int j = 0; j < m; j++ ){
if( !used[j] ){
qr[j] = x;
}
}
int xx = tryCombination(qr);
if( xx >= i )r = m;
else l = m + 1;
}
ans[l] = { i , x };
}
vector < int > S;
vector < int > D:
for( int i = 0; i < N; i++ ){
S.push_back(ans[i].se);
D.push_back(ans[i].fi);
}
answer( S , D );
}