Submission #605212

#TimeUsernameProblemLanguageResultExecution timeMemory
605212StrawHatWessMechanical Doll (IOI18_doll)C++17
53 / 100
886 ms73180 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int>vi; #define pb push_back #define sz(x) (int)x.size() #define all(x) begin(x),end(x) typedef pair<int,int>pi; #define fi first #define se second typedef vector<pi>vpi; #define eb emplace_back #define FOR(i,a,b) for(int i=a; i<b; i++) #define ROF(i,a,b) for(int i=b-1; i>=a; i--) void ckmax(ll &x, ll y){x=max(x,y);} void ckmin(ll &x, ll y){x=min(x,y);} //-------------------- const int MX=4e5+10; const int INF=1e9; int M,N; vi adj[MX]; int cnt=0; //counter for the next switch unordered_map<int,int>mpX,mpY,st; void build(int u, int val){ //st[u]=0; if(val==1) return; mpX[u]=--cnt; mpY[u]=--cnt; build(mpX[u],val/2); build(mpY[u],val/2); } void add(int x, int u, int val){ if(val==1){ if(!mpX.count(u)) mpX[u]=x; else mpY[u]=x; return; } if(!st[u]) add(x,mpX[u],val/2); else add(x,mpY[u],val/2); st[u]^=1; } void solve(){ vi C(M+1); FOR(i,0,M+1){ if(!sz(adj[i])) C[i]=0; else if(sz(adj[i])==1) C[i]=adj[i][0]; else{ int n=1; while(n<sz(adj[i])) n*=2; C[i]=--cnt; build(C[i],n/2); vi vec; FOR(rep,0,n-sz(adj[i])) vec.pb(C[i]); for(int x: adj[i]) vec.pb(x); for(int x: vec) add(x,C[i],n/2); } } cnt*=-1; vi X(cnt,-INF), Y(cnt,-INF); for(auto it: mpX){ int u=it.fi, x=it.se; u=-u; u--; X[u]=x; } for(auto it: mpY){ int u=it.fi, x=it.se; u=-u; u--; Y[u]=x; } answer(C,X,Y); } void create_circuit(int M, vi A) { ::M=M; N=sz(A); adj[0].pb(A[0]); FOR(i,0,N-1){ adj[A[i]].pb(A[i+1]); } adj[A[N-1]].pb(0); solve(); } /* 2 16 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 */
#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...