Submission #1168355

#TimeUsernameProblemLanguageResultExecution timeMemory
116835512345678Painting Squares (IOI20_squares)C++20
100 / 100
27 ms412 KiB
#include "squares.h" #include <bits/stdc++.h> using namespace std; const int k=10; int t, vs[(1<<k)], init=0, dp[(1<<k)]; vector<int> v; std::vector<int> paint(int n) { if (!init) { init=1; for (int i=0; i<k; i++) v.push_back(0); vs[0]=1; int lst=0; dp[lst]=0; for (int i=k; i<(1<<k); i++) { lst-=v[v.size()-k]*(1<<(k-1)); lst=lst*2; if (!vs[lst+1]) lst++, dp[lst]=i-k+1, v.push_back(1), vs[lst]=1; else v.push_back(0), dp[lst]=i-k+1, vs[lst]=1; } } vector<int> res=v; while (res.size()>n) res.pop_back(); res.push_back(k); return res; } int find_location(int n, std::vector<int> c) { if (!init) { init=1; for (int i=0; i<k; i++) v.push_back(0); vs[0]=1; int lst=0; dp[lst]=0; for (int i=k; i<(1<<k); i++) { lst-=v[v.size()-k]*(1<<(k-1)); lst=lst*2; if (!vs[lst+1]) lst++, dp[lst]=i-k+1, v.push_back(1), vs[lst]=1; else v.push_back(0), dp[lst]=i-k+1, vs[lst]=1; //cout<<"debug "<<lst<<' '<<dp[lst]<<'\n'; } } int cnt=0; for (auto x:c) if (x==-1) cnt++; if (cnt) return n-k+cnt; for (int i=0; i<k; i++) cnt*=2, cnt+=c[i]; return dp[cnt]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...