# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
553035 | fcmalkcin | 동굴 (IOI13_cave) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "cave.h"
#include<bits/stdc++.h>
using namespace std;
#define ll int
#define pll pair<ll,ll>
#define ff first
#define ss second
//#define endl "\n"
#define pb push_back
#define F(i,a,b) for(ll i=a;i<=b;i++)
const ll maxn=5e3+100;
const ll base=2e9;
const ll mod= 1e9+7 ;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
ll a[maxn];
ll b[maxn];
ll c[maxn];
ll msk[maxn];
ll col[maxn];
ll res[maxn];
void exploreCave(ll n)
{
memset(col,0,sizeof(col));
ll p=-1;
for (int t=0; t<14; t++)
{
if ((1ll<<t)<n)
{
p=t;
}
}
p++;
for (int i=0; i<n; i++)
{
ll msknxt=0;
vector<ll> vt;
for (int i=0; i<n; i++)
{
if (col[i])
{
vt.pb(col[i]-1);
}
else
{
vt.pb(0);
}
}
ll h=tryCombination(vt);
if (h==-1)
h=n;
ll t=1;
if (h<=i)
t=0;
// cout <<t<<" "<<i<<" "<<h<<" chk2"<<endl;
for (int j=0; j<p; j++)
{
vector<ll> vt;
for (int i=0; i<n; i++)
{
if (col[i])
{
vt.pb(col[i]-1);
}
else
{
if (i&(1ll<<j))
{
vt.pb(1^t);
}
else
{
vt.pb(0^t);
}
}
}
ll h=tryCombination(vt);
/*if (i==0)
{
cout <<h<<" "<<j<<" wtf"<<endl;
for (auto p:vt) cout <<p<<" ";
cout <<endl;
}*/
if (h==-1)
h=n;
if (h>i)
{
msknxt+=(1ll<<j);
}
}
// cout <<msknxt<<" chk3"<<endl;
col[msknxt]=(1-t)+1;
res[msknxt]=i;
}
vector<ll> vt;
vector<ll> vt1;
for (int i=0; i<n; i++)
vt.pb(col[i]-1),vt1.pb(res[i]);
answer(vt,vt1);
}