# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
835272 | 2023-08-23T11:33:26 Z | Pablo_No | 자동 인형 (IOI18_doll) | C++17 | 1000 ms | 10284 KB |
#include "doll.h" #include <vector> #include <algorithm> #include <iostream> using namespace std; vector<int> st; vector<pair<int, int>> S; vector<int> constrv(int dep) { vector<int> ans(1, 0); for(int d = 0; d < dep; d++) { vector<int> nans; for(int k = 0; k < (1 << d); k++) { nans.push_back(ans[k]); nans.push_back(ans[k]+(1 << d)); } ans = nans; } return ans; } int constr(vector<int> rem) { bool eq = true; for(int xx : rem) if(xx != rem[0]) eq = false; if(eq) { //cerr << "*" << rem[0] << '\n'; return rem[0]; } /// vector<int> v1; vector<int> v2; for(int i = 0; i < rem.size(); i++) { if(i < rem.size()/2) v1.push_back(rem[i]); else v2.push_back(rem[i]); } int id = S.size(); S.push_back({0, 0}); int na = constr(v1); int nb = constr(v2); S[id] = {na, nb}; return -id-1; } void create_circuit(int M, std::vector<int> A) { int N = A.size(); st.assign(M+1, 0); vector<vector<int>> pos(M+1); pos[0].push_back(A[0]); for(int i = 0; i < N-1; i++) { pos[A[i]].push_back(A[i+1]); } pos[A[N-1]].push_back(0); for(int i = 1; i <= M; i++) if(!pos[i].empty()) { if(pos[i].size() == 1) { st[i] = pos[i][0]; continue; } int ni = pos[i].size(); int log = __builtin_clz(1)-__builtin_clz((int)pos[i].size()-1)+1; int p2 = (1 << log); vector<int> m = constrv(log); /*for(auto x : m) cerr << x << ' '; cerr << '\n';*/ vector<pair<int, int>> pm; for(int k = p2-ni; k < p2; k++) { pm.push_back({m[k], k}); //cerr << m[k] << '-' << pos[i][k-(p2-ni)] << '\n'; } vector<int> toc(p2, -S.size()-1); sort(pm.begin(), pm.end()); for(int k = 0; k < pm.size(); k++) { auto [aa, bb] = pm[k]; //cerr << aa << '+' << bb << '\n'; toc[bb] = pos[i][k]; } /*for(int xx : toc) cerr << xx << ' '; cerr << '\n';*/ st[i] = constr(toc); } st[0] = A[0]; vector<int> X(S.size()); vector<int> Y(S.size()); for(int xx : st) //cerr << xx << '\n'; for(int i = 0; i < S.size(); i++) { X[i] = S[i].first; Y[i] = S[i].second; //cerr << X[i] << ' ' << Y[i] << '\n'; } answer(st, X, Y); }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 18 ms | 6388 KB | Output is correct |
3 | Correct | 15 ms | 5172 KB | Output is correct |
4 | Correct | 1 ms | 212 KB | Output is correct |
5 | Correct | 12 ms | 3796 KB | Output is correct |
6 | Correct | 24 ms | 7636 KB | Output is correct |
7 | Correct | 0 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 18 ms | 6388 KB | Output is correct |
3 | Correct | 15 ms | 5172 KB | Output is correct |
4 | Correct | 1 ms | 212 KB | Output is correct |
5 | Correct | 12 ms | 3796 KB | Output is correct |
6 | Correct | 24 ms | 7636 KB | Output is correct |
7 | Correct | 0 ms | 212 KB | Output is correct |
8 | Execution timed out | 1072 ms | 6188 KB | Time limit exceeded |
9 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 18 ms | 6388 KB | Output is correct |
3 | Correct | 15 ms | 5172 KB | Output is correct |
4 | Correct | 1 ms | 212 KB | Output is correct |
5 | Correct | 12 ms | 3796 KB | Output is correct |
6 | Correct | 24 ms | 7636 KB | Output is correct |
7 | Correct | 0 ms | 212 KB | Output is correct |
8 | Execution timed out | 1072 ms | 6188 KB | Time limit exceeded |
9 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 1 ms | 212 KB | Output is correct |
3 | Correct | 1 ms | 256 KB | Output is correct |
4 | Correct | 1 ms | 300 KB | Output is correct |
5 | Correct | 1 ms | 304 KB | Output is correct |
6 | Correct | 1 ms | 212 KB | Output is correct |
7 | Correct | 1 ms | 212 KB | Output is correct |
8 | Correct | 1 ms | 296 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 30 ms | 5824 KB | Output is correct |
3 | Correct | 23 ms | 8912 KB | Output is correct |
4 | Correct | 38 ms | 10284 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 30 ms | 5824 KB | Output is correct |
3 | Correct | 23 ms | 8912 KB | Output is correct |
4 | Correct | 38 ms | 10284 KB | Output is correct |
5 | Execution timed out | 1081 ms | 8848 KB | Time limit exceeded |
6 | Halted | 0 ms | 0 KB | - |