Submission #299701

#TimeUsernameProblemLanguageResultExecution timeMemory
299701Dremix10Mechanical Doll (IOI18_doll)C++17
6 / 100
89 ms10384 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pi; #define F first #define S second #define endl '\n' #define all(x) (x).begin(),(x).end() const ll INF = 1e18; const int N = 3e5+1; void create_circuit(int m, vector<int> a) { int n = a.size(); /// each trigger can only go to one place /// so in the case of {1,2,1} 1 can't go to 2 because /// the second time we get to 1 we will go to 2 which /// shouldn't happen int i,s = 1; vector<int> ans(m+1); vector<int> x,y; int cnt[m+1]={}; for(auto x : a) cnt[x]++; int now[m+1]={}; ans[0] = a[0]; a.push_back(0); /// build circuit /* for(i=0;i<n;i++){ int curr = a[i]; if(cnt[curr]==1){ ans[curr] = a[i+1]; } else if(cnt[curr]==2){ if(!now[curr]){ ans[curr] = -s; s++; x.push_back(a[i+1]); y.push_back(0); now[curr]++; } else{ y[-ans[curr]-1] = a[i+1]; now[curr]++; } } else if(cnt[curr]==3){ if(!now[curr]){ ans[curr] = -s; /// creating and directing first switch s++; x.push_back(-s); s++; y.push_back(-s); s++; /// configure second switch x.push_back(a[i+1]); y.push_back(-s+1); /// prep third switch x.push_back(-1); y.push_back(-1); now[curr]++; } else if(now[curr]==1){ int idx = y[-ans[curr]-1]; /// configure half third switch x[-idx-1] = ans[i+1]; now[curr]++; } else{ int idx = y[-ans[curr]-1]; /// configure other half third switch y[-idx-1] = ans[i+1]; now[curr]++; } } else{ if(!now[curr]){ ans[curr] = -s; /// creating and directing first switch s++; x.push_back(-s); s++; y.push_back(-s); s++; /// configure half second switch + prep other x.push_back(a[i+1]); y.push_back(-1); /// prep third switch x.push_back(-1); y.push_back(-1); now[curr]++; } else if(now[curr]==1){ int idx = y[-ans[curr]-1]; /// configure half third switch x[-idx-1] = ans[i+1]; now[curr]++; } else if(now[curr]==2){ int idx = x[-ans[curr]-1]; /// configure other half second switch y[-idx-1] = ans[i+1]; now[curr]++; } else{ int idx = y[-ans[curr]-1]; /// configure other half third switch y[-idx-1] = ans[i+1]; now[curr]++; } } } /// build circuit */ for(i=1;i<=m;i++) if(!cnt[i])ans[i] = i; answer(ans,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...