Submission #637110

#TimeUsernameProblemLanguageResultExecution timeMemory
637110Dec0DeddDEL13 (info1cup18_del13)C++14
40 / 100
23 ms6216 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e5+100; int d[N], par[N][3], cnt[N], n, q; bool dp[N][3], vis[N][3]; bool gen(int i, int l) { if (i == q) { if (l == 0) return true; return false; } int x=d[i]-l; if (x < 0) return false; if (vis[i][l]) return dp[i][l]; vis[i][l]=true; if (x%2 == 0) { if ((x == 0 || l > 0) && gen(i+1, 0)) par[i][l]=0, dp[i][l]=true; if (x >= 2 && gen(i+1, 2)) par[i][l]=2, dp[i][l]=true; } else { if (gen(i+1, 1)) par[i][l]=1, dp[i][l]=true; } return dp[i][l]; } void solve(int c) { cin>>n>>q; if (q == 0) { cout<<-1<<"\n"; return; } for (int i=0; i<=n+10; ++i) d[i]=0; for (int i=0; i<=n+10; ++i) { for (int j=0; j<3; ++j) dp[i][j]=vis[i][j]=false, par[i][j]=-1; } vector<int> v; v.push_back(0); for (int i=0; i<q; ++i) { int p; cin>>p; v.push_back(p); } q+=2, v.push_back(n+1); for (int i=1; i<q; ++i) d[i]=cnt[i]=v[i]-v[i-1]-1; bool ok=gen(1, 0); if (!ok) { cout<<-1<<"\n"; } else { int l=0; for (int i=1; i<=n; ++i) { int x=par[i][l]; cnt[i]-=x, cnt[i+1]-=x; l=par[i][l]; } vector<int> mv; for (int i=1; i<q; ++i) { int l=v[i-1], k=cnt[i]/2; assert(cnt[i]%2 == 0); int x=l+2; while (k--) mv.push_back(x); } l=0; for (int i=1; i<q; ++i) { int x=par[i][l]; while (x--) mv.push_back(v[i]); l=par[i][l]; } cout<<mv.size()<<"\n"; for (auto u : mv) cout<<u<<" "; cout<<"\n"; } } int main() { int t, c=1; cin>>t; while (t--) solve(c++); }
#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...