# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
966078 | 2024-04-19T11:01:38 Z | anango | Mechanical Doll (IOI18_doll) | C++17 | 1000 ms | 8664 KB |
#include "doll.h" #include <bits/stdc++.h> #define int long long using namespace std; int m; int n; int MAXN=1; int depth=0; vector<int> C; vector<int> X; vector<int> Y; void update(int pos, int val) { pos+=MAXN; //cout <<"UPDATED " << pos <<" "<< val << endl; if (pos%2==0) { X[pos/2] = val; } else { Y[pos/2] = val; } pos/=2; while (pos>1) { int par=pos/2; if (pos%2==0) { X[par] = -pos; } else { Y[par] = -pos; } pos=par; } } int binrev(int v) { vector<int> bits; while (v) { bits.push_back(v%2); v/=2; } int x=0; for (auto i:bits) { x*=2; x+=i; } return x; } int time(int k) { vector<int> bits; for (int i=0; i<depth; i++) { bits.push_back(k%2); k/=2; } int x=0; for (auto i:bits) { x*=2; x+=i; } return x; } void create_circuit(signed M, vector<signed> A) { int N = A.size(); N++; A.push_back(0); //top of the tree = 1 //sons of i are 2*i and 2*i+1 for (int i=1; i<100; i++) { MAXN*=2; if (MAXN>=N) { depth=i; break; } } for (int i=0; i<8; i++) { //cout << i <<" " << time(i) << endl; } int S=MAXN; C=vector<int>(M+1,-1); X=vector<int>(S+1,-1); Y=vector<int>(S+1,-1); C[0] = -1; int lef=MAXN/2; int ri=N-lef; vector<int> elems; for (int i=0; i<lef; i++) { //cout << i <<" " << binrev(i) << endl; elems.push_back(i); } for (int i=MAXN-ri; i<MAXN; i++) { elems.push_back(i); } sort(elems.begin(), elems.end(), [=](const int a, const int b) { return time(a)<time(b); }); //cout << "ELEMS" << endl; //for (auto i:elems) { // cout << i <<" "; // } //cout << endl; assert(elems.size()==N); for (int i=0; i<elems.size(); i++) { update(elems[i], A[i]); } //cout << "DONE1" << " " << M << " " << S << " " << S <<" " <<endl; vector<signed> C2; vector<signed> X2; vector<signed> Y2; //cout << "DONE3" << endl; for (int i=0; i<C.size(); i++) { //cout << i <<" " << C.size() << " " << C[i] << " " << M+1 << endl; C2.push_back(C[i]); } for (int i=1; i<=S; i++) { X2.push_back(X[i]); } for (int i=1; i<=S; i++) { Y2.push_back(Y[i]); } //cout << "DONE2" << endl; A.pop_back(); //cout << "DONE" << endl; answer(C2, X2, Y2); }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 344 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 344 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 344 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 348 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Partially correct | 0 ms | 432 KB | Output is partially correct |
2 | Execution timed out | 1095 ms | 8664 KB | Time limit exceeded |
3 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Partially correct | 0 ms | 432 KB | Output is partially correct |
2 | Execution timed out | 1095 ms | 8664 KB | Time limit exceeded |
3 | Halted | 0 ms | 0 KB | - |