Submission #349534

#TimeUsernameProblemLanguageResultExecution timeMemory
349534KerimMechanical Doll (IOI18_doll)C++17
44 / 100
159 ms21116 KiB
#include "doll.h" #include "bits/stdc++.h" #define MAXN 200009 #define INF 1000000007 #define mp(x,y) make_pair(x,y) #define all(v) v.begin(),v.end() #define pb(x) push_back(x) #define wr cout<<"----------------"<<endl; #define ppb() pop_back() #define tr(ii,c) for(__typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++) #define ff first #define ss second #define my_little_dodge 46 #define debug(x) cerr<< #x <<" = "<< x<<endl; using namespace std; typedef long long ll; typedef pair<int,int> PII; template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;} template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;} vector<int>X,Y; int S,M,ans[MAXN<<2],shift[MAXN<<2],ind[MAXN<<2]; void rec(int nd,int pos,int rem,int id){ if(rem<0){ ans[pos]=id; return; } shift[nd]^=1; if(shift[nd])rec(nd*2,pos,rem-1,id); else rec(nd*2+1,pos+(1<<rem),rem-1,id); } vector<int>v;int root,rem; int XX[MAXN],YY[MAXN]; int dfs(int l,int r){ if(r<rem) return root; if(l==r) return v[ans[l]]; int ata=--S; int mid=(l+r)>>1; XX[-ata-1]=dfs(l,mid); YY[-ata-1]=dfs(mid+1,r); return ata; } bool cmp(int x,int y){ return (ans[x]<ans[y]); } int solve(){ int sz=int(v.size()),K=0; if(sz==0)return 0; if(sz==1)return v[0]; while((1<<K)<sz)K++; for(int i=0;i<(1<<K);i++) rec(1,0,K-1,i),ind[i]=i; root=S-1,rem=(1<<K)-sz; for(int i=0;i<rem;i++) ans[i]=(1<<K); sort(ind,ind+(1<<K),cmp); for(int i=0;i<(1<<K);i++) ans[ind[i]]=i; dfs(0,(1<<K)-1); return root; } vector<int>adj[MAXN]; void create_circuit(int m, std::vector<int> A) { M=m;A.pb(0);vector<int>C(M+1); int N=int(A.size()); for(int i=0;i<N;i++) adj[A[i]].pb(A[(i+1)%N]); for(int i=0;i<=M;i++) v=adj[i],C[i]=solve(); for(int i=0;i<-S;i++) X.pb(XX[i]),Y.pb(YY[i]); answer(C,X,Y); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...