Submission #835588

#TimeUsernameProblemLanguageResultExecution timeMemory
835588Dremix10Mechanical Doll (IOI18_doll)C++17
6 / 100
74 ms11772 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; #define F first #define S second #define all(x) (x).begin(),(x).end() typedef long long ll; typedef pair<int,int> pi; typedef pair<ll,ll> pl; const int N = 3e5+5; const ll INF = 1e18+5; const int MOD = 1e9+7; vector<int> x,y,c; vector<vector<int> > nxt; int solve(vector<int> &a){ assert(!a.empty()); int n = a.size(); int i; bool ok = 1; int curr = a[0]; vector<int> p1,p2; for(i=0;i<n-1;i+=2){ if(curr != a[i] || curr != a[i+1])ok = 0; p1.push_back(a[i]); p2.push_back(a[i+1]); } if(curr != a[n-1])ok = 0; if(ok){ return curr; } if(n%2){ /// we gotta add x.push_back(0); y.push_back(0); int res = x.size(); p1.push_back(res*-1); p2.push_back(a.back()); //cerr<<idx1<<endl; x[res-1] = solve(p1); y[res-1] = solve(p2); return res*-1; } else{ x.push_back(solve(p1)); y.push_back(solve(p2)); int res = x.size(); //cerr<<res*-1<<":"<<endl; //cerr<<idx1<<" "<<idx2<<endl; return res*-1; } } void create_circuit(int m, vector<int> arr) { int n = arr.size(); c.resize(m+1); /// origin goes to first trigger c[0] = arr[0]; int i; nxt.assign(m+1,vector<int>()); for(i=0;i<n;i++){ if(i < n-1) nxt[arr[i]].push_back(arr[i+1]); else nxt[arr[i]].push_back(0); } for(i=1;i<=m;i++){ int cnt = nxt[i].size(); if(cnt == 0)continue; else if(cnt == 1){ c[i] = nxt[i][0]; } else{ //int idx = x.size() + 1; c[i] = solve(nxt[i]); } } 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...