Submission #758723

#TimeUsernameProblemLanguageResultExecution timeMemory
758723amunduzbaevPrisoner Challenge (IOI22_prison)C++17
90 / 100
9 ms1100 KiB
#include "prison.h" #include "bits/stdc++.h" using namespace std; #ifndef EVAL #include "grader.cpp" #endif #define ar array typedef long long ll; typedef int32_t ii; //~ #define int ll vector<vector<ii>> devise_strategy(ii n) { vector<vector<ii>> a(1, vector<ii>(n + 1)); vector<vector<ar<int, 4>>> rng(100); a[0][0] = 1; int l = 1, r = n; a[0][l] = -2, a[0][r] = -1; l++, r--; int third = (r - l + 3) / 3; rng[a.size()].push_back({l - 1, r + 1, l, l + third - 1}); for(int i=l;i<l+third;i++){ a[0][i] = a.size(); } rng[a.size() + 1].push_back({l - 1, r + 1, l + third, l + 2 * third - 1}); for(int i=l+third;i<l+2*third;i++){ a[0][i] = a.size() + 1; } rng[a.size() + 2].push_back({l - 1, r + 1, l + 2 * third, r}); for(int i=l+2*third;i<=r;i++){ a[0][i] = a.size() + 2; } vector<int> b_(n + 1, 0); a.push_back(b_); a.push_back(b_); a.push_back(b_); for(int b=6;b>0;b--){ for(int j=(int)a.size() - 3;j<(int)a.size();j++){ a[j][0] = b & 1; for(auto [l, r, l_, r_] : rng[j]){ for(int k=l;k<=l_;k++){ if(a[j][0]){ a[j][k] = -2; } else { a[j][k] = -1; } } for(int k=r_;k<=r;k++){ if(a[j][0]){ a[j][k] = -1; } else { a[j][k] = -2; } } l_++, r_--; int third = (r_ - l_ + 3) / 3; { int _l = l_, _r = min(r_, l_ + third - 1); if(_l <= _r){ rng[a.size()].push_back({l_ - 1, r_ + 1, _l, _r}); for(int k=_l;k<=_r;k++){ a[j][k] = a.size(); } } } { int _l = l_ + third, _r = min(r_, l_ + 2 * third - 1); if(_l <= _r){ rng[a.size() + 1].push_back({l_ - 1, r_ + 1, _l, _r}); for(int k=_l;k<=_r;k++){ a[j][k] = a.size() + 1; } } } { int _l = l_ + 2 * third, _r = r_; if(_l <= _r){ rng[a.size() + 2].push_back({l_ - 1, r_ + 1, _l, _r}); for(int k=_l;k<=_r;k++){ a[j][k] = a.size() + 2; } } } } //~ int prev = (j - 1) % 3; //~ a[j][0] = b&1; //~ for(int i=1;i<=n;i++){ //~ int cur = get(i, b + 1); //~ if(cur < prev){ //~ if(b&1) a[j][i] = -2; //~ else a[j][i] = -1; //~ } //~ if(prev < cur){ //~ if(b&1) a[j][i] = -1; //~ else a[j][i] = -2; //~ } //~ if(prev == cur){ //~ a[j][i] = a.size() + get(i, b); //~ } //~ } } a.push_back(b_); a.push_back(b_); a.push_back(b_); } for(int j=(int)a.size() - 3;j<(int)a.size();j++){ a[j][0] = 0; for(auto [l, r, l_, r_] : rng[j]){ for(int k=l;k<=l_;k++){ a[j][k] = -1; } for(int k=r_;k<=r;k++){ a[j][k] = -2; } l_++, r_--; assert(l_ > r_); //~ int third = (r_ - l_ + 3) / 3; //~ rng[a.size()].push_back({l_ - 1, r_ + 1, l_, l_ + third - 1}); //~ for(int k=l_;k<l_ + third;k++){ //~ a[j][k] = a.size(); //~ } //~ rng[a.size() + 1].push_back({l_ - 1, r_ + 1, l_ + third, l_ + 2 * third - 1}); //~ for(int k=l_+third;k<l_ + 2 * third;k++){ //~ a[j][k] = a.size() + 1; //~ } //~ rng[a.size() + 2].push_back({l_ - 1, r_ + 1, l_ + 2 * third, r_}); //~ for(int k=l_ + 2 * third;k<=r_;k++){ //~ a[j][k] = a.size() + 2; //~ } } //~ int prev = (j - 1) % 3; //~ a[j][0] = 0; //~ for(int i=1;i<=n;i++){ //~ int cur = get(i, 1); //~ if(cur < prev){ //~ a[j][i] = -1; //~ } //~ if(prev < cur){ //~ a[j][i] = -2; //~ } //~ if(prev == cur){ //~ int nxt = get(i, 0); //~ if(nxt == 0){ //~ a[j][i] = -1; //~ } if(nxt == 2){ //~ a[j][i] = -2; //~ } if(nxt == 1){ //~ a[j][i] = a.size(); //~ } //~ } //~ } } //~ a.push_back(b_); //~ a.back()[0] = 1; //~ for(int i=1;i<=n;i++){ //~ int cur = get(i, 0); //~ if(cur == 0){ //~ a.back()[i] = -2; //~ } if(cur == 2){ //~ a.back()[i] = -1; //~ } //~ } return a; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...