제출 #586092

#제출 시각아이디문제언어결과실행 시간메모리
586092jasmin자동 인형 (IOI18_doll)C++14
37 / 100
121 ms15384 KiB
#include<bits/stdc++.h> using namespace std; #include<doll.h> //#define int long long int ind; vector<int> x; vector<int> y; int inf=1e9+7; /*void answer(vector<int> c, vector<int> x, vector<int> y){ cout << c.size() << "\n"; for(auto e: c){ cout << e << " "; } cout << "\n"; cout << x.size() << "\n"; for(int i=0; i<(int)x.size(); i++){ cout << x[i] << " " << y[i] << "\n"; } }*/ int create_tree(int h, int maxh, int num, vector<int>& a, int n, int root){ //cout << ind << " " << h << " " << num << " " << maxh << " " << n << " " << root << "\n"; if(h==maxh){ if(num<n) return root; return -a[num-n]; } int i=ind; x.push_back(0); y.push_back(0); ind++; int child0=-create_tree(h+1, maxh, num, a, n, root); int child1=-create_tree(h+1, maxh, num+(1<<h), a, n, root); x[i-1]=child0; y[i-1]=child1; return i; } int pow2(int x){ int ans=0; int p=1; while(p<x){ ans++; p*=2; } return ans; } int binarytree(int i, int num, int h, int maxh, vector<int> a){ if(h==maxh){ return -a[num]; } x[i]=-binarytree(i*2, num, h+1, maxh, a); y[i]=-binarytree(i*2+1, num+(1<<h), h+1, maxh, a); return i; } void solve16(int m, vector<int> a){ int n=a.size(); //=16 x.clear(); y.clear(); vector<int> c(m+1, -1); c[0]=a[0]; c[a[n-1]]=0; binarytree(1, 0, 0, 4, a); answer(c, x, y); } void create_circuit(int m, vector<int> a){ if(a.size()==16){ solve16(m, a); } vector<vector<int> > adi(m+1, vector<int> (0)); int n=a.size(); a.push_back(0); for(int i=0; i<n; i++){ adi[a[i]].push_back(a[i+1]); } x.clear(); y.clear(); ind=1; vector<int> c(m+1, 0); c[0]=a[0]; for(int i=0; i<=m; i++){ if(adi[i].size()==0) continue; if(adi[i].size()==1){ c[i]=adi[i][0]; continue; } int maxh=pow2(adi[i].size()); int left=(1<<maxh)-adi[i].size(); c[i]=-create_tree(0, maxh, 0, adi[i], left, ind); } answer(c, x, y); } /*signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int m, n; cin >> m >> n; vector<int> a(n); for(int i=0; i<n; i++){ cin >> a[i]; } create_circuit(m, a); }*/
#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...