Submission #1026501

#TimeUsernameProblemLanguageResultExecution timeMemory
1026501MalixMechanical Doll (IOI18_doll)C++14
24 / 100
106 ms11468 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> tii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define MP make_pair #define LSOne(s) ((s)&(-s)) ll INF=1e18+10; int inf=1e9+10; ll M=1e9+7; void create_circuit(int M, std::vector<int> A) { int n=A.size(); vi c,x,y; vi p; REP(i,0,21)p.PB(pow(2,i)); c.resize(M+1,0); c[0]=A[0]; vi a(M+1,0); vii b(M+1); REP(i,0,n)a[A[i]]++; REP(i,0,n-1)b[A[i]].PB(A[i+1]); b[A[n-1]].PB(0); int k=0; REP(j,1,M+1){ if(a[j]==0)continue; if(a[j]==1)c[j]=b[j][0]; else if(a[j]==2){ c[j]=k-1; k--; x.PB(b[j][0]); y.PB(b[j][1]); } else{ c[j]=k-1; k--; vi x1,y1; auto it=lower_bound(p.begin(),p.end(),a[j]); int k1=log2(*it); int pos=k; int t=0; x1.PB(inf);y1.PB(inf); REP(i,0,k1-1){ REP(v,0,pow(2,i)){ t++; x1.PB(pos-1); y1.PB(pos-2); pos-=2; } } REP(v,0,pow(2,k1-1)){ x1.PB(k); y1.PB(k); } vi arr(*it,0); int g=*it; int pp=0; int r=0; while(g){ g/=2; while(pp<*it){ pp+=g; REP(i,pp,pp+g)arr[i]|=(1<<r); pp+=g; } r++; } pii brr; REP(i,1,a[j]+1)brr.PB({arr[*it-i],*it-i}); sort(brr.begin(),brr.end()); REP(i,0,a[j]){ if(brr[i].S%2==0)x1[t+brr[i].S/2+1]=b[j][i]; else y1[t+brr[i].S/2+1]=b[j][i]; } int s=x1.size(); for(int i=s-1;i>=1;i--)if(x1[i]==k&&y1[i]==k){ x1[i]=inf;y1[i]=inf; if(i%2==0)x1[i/2]=k; else y1[i/2]=k; } pos=k; REP(i,1,s){ if(x1[i]!=pos&&x1[i]!=inf){ if(x1[i]<0){ x.PB(k-1); k--; } else x.PB(x1[i]); } else if(x1[i]!=inf)x.PB(pos); if(y1[i]!=pos&&y1[i]!=inf){ if(y1[i]<0){ y.PB(k-1); k--; } else y.PB(y1[i]); } else if(y1[i]!=inf)y.PB(pos); } } } // for(auto u:c)cerr<<u<<" "; // cerr<<"\n"; // for(auto u:x)cerr<<u<<" "; // cerr<<"\n"; // for(auto u:y)cerr<<u<<" "; // cerr<<"\n"; 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...