제출 #239439

#제출 시각아이디문제언어결과실행 시간메모리
239439michao동굴 (IOI13_cave)C++14
13 / 100
883 ms760 KiB
#include <bits/stdc++.h> #include "cave.h" #define ll long long int #define mp make_pair #define pb push_back #define ld long double #define pii pair<int,int> #define sz(x) (int)x.size() #define piii pair<pii,pii> #define precise cout<<fixed<<setprecision(10) #define st first #define nd second #define ins insert #define vi vector<int> #define BOOST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0) using namespace std; const int MAX=5005; int pom[MAX],perm[MAX],arr[MAX]; void get(int n) { for (int i=0;i<n;i++)pom[i]=arr[i]; } void exploreCave(int n) { for (int i=0;i<n;i++)arr[i]=-1,perm[i]=-1; vi pos; int x=0; int ile=0; for (int door=0;door<n;door++) { pos.clear(); get(n); for (int i=0;i<n;i++) if (arr[i]==-1)pos.pb(i); int bit=1; for (int i=0;i<n;i++) if (arr[i]==-1)pom[i]=1; int y=tryCombination(pom); if (y==-1)y=n; if (y<=x)bit^=1; assert(y>=x); if (ile>=70000) { while(true)ile++; } int ile=sz(pos); int ip=-1,ik=sz(pos)-1; while (ip+1<ik) { if (ile>=70000) { while(true)ile++; } int mid=(ip+ik)>>1; get(n); for (int i=0;i<=mid;i++)pom[pos[i]]=bit; for (int i=mid+1;i<sz(pos);i++)pom[pos[i]]=bit^1; y=tryCombination(pom); ile++; if (y>x)ik=mid; else ip=mid; } ip=pos[ip+1]; perm[ip]=door,arr[ip]=bit; x++; } answer(arr,perm); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...