Submission #338061

#TimeUsernameProblemLanguageResultExecution timeMemory
338061NimbostratusRestore Array (RMI19_restore)C++17
45 / 100
202 ms620 KiB
#include <bits/stdc++.h> #define mt make_tuple using namespace std; typedef long long ll; const ll INF = 1e15; int N,M; string ans; vector<tuple<int,int,int,int>> q; int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("in","r",stdin); //freopen("out","w",stdout); cin >> N >> M; if(N <= 18) { q.resize(M); for(int i=0;i<M;i++) { int l,r,k,v; cin >> l >> r >> k >> v; q[i] = mt(l,r,k,v); } for(int i=0;i<(1<<N);i++) { string cur; for(int k=0;k<N;k++) cur = char('0' + !!(i&(1<<k))) + cur; int pre[cur.size()+5]; pre[0] = (cur[0] - '0'); for(int i=1;i<cur.size();i++) pre[i] = pre[i-1] + (cur[i] - '0'); bool flag = 1; for(int i=0;i<M and flag;i++) { int l,r,k,v; tie(l,r,k,v) = q[i]; //cout << l << " " << r << " " << k << " " << v << endl; int onecnt = pre[r] - (l == 0 ? 0 : pre[l-1]); if(v == 0) flag = flag and ((r-l+1)-onecnt >= k); else flag = flag and ((r-l+1)-onecnt < k); } if(flag) { for(int i=0;i<cur.size();i++) cout << int(cur[i]-'0') << " "; return 0; } } cout << -1 << endl; } else { for(int i=0;i<N;i++) ans += '2'; q.resize(M); for(int i=0;i<M;i++) { int l,r,k,v; cin >> l >> r >> k >> v; q[i] = mt(l,r,k,v); } for(int i=0;i<M;i++) { int l,r,k,v; tie(l,r,k,v) = q[i]; if(v == 1 and k == 1) for(int i=l;i<=r;i++) ans[i] = '1'; if(v == 0 and k == r-l+1) for(int i=l;i<=r;i++) if(ans[i] == '1') { cout << -1 << endl; return 0; } else ans[i] = '0'; } for(int i=0;i<M;i++) { int l,r,k,v; tie(l,r,k,v) = q[i]; if(v == 0 and k == 1) { bool flag = 0; for(int i=l;i<=r;i++) { if(ans[i] == '0') flag = 1; if(ans[i] == '2' and !flag) { ans[i] = '0'; flag = 1; } } if(!flag) { cout << -1 << endl; return 0; } } if(v == 1 and k == r-l+1) { bool flag = 0; for(int i=l;i<=r;i++) { if(ans[i] == '1') flag = 1; if(ans[i] == '2' and !flag) { ans[i] = '1'; flag = 1; } } if(!flag) { cout << -1 << endl; return 0; } } } for(int i=0;i<N;i++) cout << (ans[i] == '2' ? '1' : ans[i]) << " "; } }

Compilation message (stderr)

restore.cpp: In function 'int32_t main()':
restore.cpp:34:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |       for(int i=1;i<cur.size();i++)
      |                   ~^~~~~~~~~~~
restore.cpp:50:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |        for(int i=0;i<cur.size();i++)
      |                    ~^~~~~~~~~~~
restore.cpp:74:6: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   74 |    if(v == 0 and k == r-l+1)
      |      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...