Submission #535426

#TimeUsernameProblemLanguageResultExecution timeMemory
535426mario05092929Mechanical Doll (IOI18_doll)C++14
100 / 100
120 ms19032 KiB
#include "doll.h" #include <bits/stdc++.h> #define x first #define y second using namespace std; typedef long long ll; typedef pair <int,int> pi; typedef vector <int> vec; typedef vector <ll> vecl; using namespace std; const int INF = 1e9; int nam; int c[1000005],g; struct hap {int bit,wi,wh;}; vector <hap> sw; int n,m,k; int edge[1000005][2]; bool cmp(hap x,hap y) { return x.bit < y.bit; } void build(int x,int go,int bit) { if(!nam) return; c[x] = ++g; if(x*2 >= k) { edge[g][0] = edge[g][1] = -1; sw.push_back({bit,g,0}); sw.push_back({bit+(1 << go),g,1}); nam--; return; } build(x*2+1,go+1,bit+(1 << go)), build(x*2,go+1,bit); edge[c[x]][0] = (c[x*2] == -1 ? -1 : -c[x*2]); edge[c[x]][1] = (c[x*2+1] == -1 ? -1 :-c[x*2+1]); } void create_circuit(int M,vec A) { memset(c,-1,sizeof(c)); n = A.size(), m = M; for(k = 1;k <= n;k *= 2); nam = n/2+1; build(1,0,0); sort(sw.begin(),sw.end(),cmp); for(int i = 0;i < n;i++) edge[sw[i].wi][sw[i].wh] = A[i]; edge[sw.back().wi][sw.back().wh] = 0; vec le,ri; for(int i = 1;i <= g;i++) { le.push_back(edge[i][0]); ri.push_back(edge[i][1]); } answer(vector<int>(m+1,-1),le,ri); }
#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...