# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
99359 | nad312 | 동굴 (IOI13_cave) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cave.h>
#include<bits/stdc++.h>
using namespace std;
typedef long long int lli;
const lli N=5009, inf=1e15;
lli a[N], query[N], com[N], pos[N];
//tryCombination(intS[])
lli Ask()
{
lli k=tryCombination(query);
if(k==-1)
{
return inf;
}
return k;
}
void Find(lli x)
{
vector<lli> p;
for(int i=1;i<=n;i++)
{
if(com[i]==-1)
{
query[i]=0;
p.push_back(i);
}
else
{
query[i]=com[i];
}
}
lli a=(Ask()>x), l=0, h=p.size()-1;
while(l<h)
{
lli mid=(l+h)/2;
for(int i=l;i<=mid;i++)
{
query[p[i]]=0;
}
for(int i=mid+1;i<=h;i++)
{
query[p[i+1]]=1;
}
if(Ask()>x)
{
if(a==1)
{
h=mid;
}
else
{
l=mid+1;
}
}
else
{
if(a==1)
{
l=m+1;
}
else
{
h=mid;
}
}
}
com[l]=(a^1);
pos[l]=i;
}
void exploreCave(int n)
{
fill_n(&com[0], sizeof(com)/sizeof(com[0]), -1);
fill_n(&pos[0], sizeof(pos)/sizeof(pos[0]), -1);
for(int i=1;i<=n;i++)
{
Find(i);
}
answer(com, pos);
}