Submission #1041611

#TimeUsernameProblemLanguageResultExecution timeMemory
1041611amunduzbaevMechanical Doll (IOI18_doll)C++17
53 / 100
130 ms14692 KiB
#include "doll.h" #include "bits/stdc++.h" using namespace std; #define ar array typedef long long ll; template<class T> bool umin(T& a, const T b){ if(a > b) { a = b; return true; } return false; } template<class T> bool umax(T& a, const T b){ if(a < b) { a = b; return true; } return false; } void create_circuit(int m, vector<int> a) { int n = a.size(); vector<int> c(m + 1); vector<int> cnt(m + 1); a.insert(a.begin(), 0); a.push_back(0); for(int i=0;i<=n;i++){ cnt[a[i]]++; } vector<vector<int>> out(m + 1); for(int i=1;i<=n+1;i++){ int x = a[i - 1], y = a[i]; //~ out[x].push_back(y); out[x].push_back(y); //~ if(cnt[y] == 1){ //~ out[x].push_back(y); //~ } else { //~ out[x].push_back(y); //~ } } int last = 0; vector<int> x_, y_; auto get = [&](){ x_.push_back(0); y_.push_back(0); return ++last; }; function<int(vector<int>&)> dfs = [&](vector<int>& a){ if((int)a.size() == 1){ return a[0]; } //~ bool is_same = true; vector<int> l, r; for(int i=0;i<(int)a.size();i++){ if(i & 1) r.push_back(a[i]); else l.push_back(a[i]); //~ if(a[i] != a[0]) is_same = false; } //~ if(is_same){ //~ return a[0]; //~ } int v = get(); if((int)a.size() & 1){ r.push_back(l.back()); l.back() = -v; } //~ cout<<"before: "<<dfs(l, 0)<<" "<<dfs(r, 0)<<endl; int tmpLeft = dfs(l); int tmpRight = dfs(r); x_[v - 1] = tmpLeft; y_[v - 1] = tmpRight; //~ cout<<-v<<" "<<tmpLeft<<" "<<tmpRight<<"\n"; return -v; }; for(int i=0;i<=m;i++){ if(!cnt[i]) continue; if(cnt[i] == 1){ //~ cout<<i<<endl; c[i] = out[i][0]; continue; } //~ dfs(a_, i); c[i] = dfs(out[i]); } //~ for(int i=0;i<=m;i++){ //~ cout<<i<<" : "; //~ for(auto x : out[i]) cout<<x<<" "; //~ cout<<endl; //~ } //~ for(int i=0;i<=m;i++){ //~ cout<<c[i]<<" "; //~ } //~ cout<<endl; //~ cout<<(int)x_.size()<<" "<<last<<endl; //~ for(int i=0;i<last;i++){ //~ cout<<-(i + 1)<<" "; //~ } cout<<endl; //~ for(int i=0;i<last;i++){ //~ cout<<x_[i]<<" "; //~ } cout<<endl; //~ for(int i=0;i<last;i++){ //~ cout<<y_[i]<<" "; //~ } cout<<endl; //~ cout<<last<<endl; const int maxAns = 4e5; assert(last <= maxAns); 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...