Submission #603963

#TimeUsernameProblemLanguageResultExecution timeMemory
603963nekiUnscrambling a Messy Bug (IOI16_messy)C++14
100 / 100
5 ms468 KiB
#include <bits/stdc++.h> #include "messy.h" #define vc vector using namespace std; /*string permute(string s, vc<int> p){ cout << s << endl; assert(s.size()==p.size()); string ret(s.size(), '.'); for(int i=0;i<s.size();++i) ret[i]=s[p[i]]; return ret; } int cw=0, cr=0; set<string> notr; bool check_element(string s){ ++cr; cout << s << endl; return notr.count(s)>0; } vc<int> p; void add_element(string s){ ++cw; cout << s << endl; notr.insert(permute(s, p)); } void compile_set(){cout << '\n';}*/ ///////// void badd(int l, int r, int n){ if(l+1==r) return; int mid=(l+r)/2; string s(n, '1'); for(int i=l; i<r;++i) s[i]='0'; for(int i=l; i<mid;++i){ string t=s; t[i]='1'; add_element(t); } badd(l, mid, n); badd(mid, r, n); } void bquery(int l, int r, int n, vc<int>& ans){ if(l+1==r) return; int mid=(l+r)/2; string s(n, '1'); for(int i=l; i<r;++i) s[ans[i]]='0'; set<int> ls, rs; for(int i=l; i<r;++i){ string t=s; t[ans[i]]='1'; if(check_element(t)) ls.insert(ans[i]); else rs.insert(ans[i]); } vc<int> lv(ls.begin(), ls.end()), rv(rs.begin(), rs.end()); assert(lv.size()==(mid-l) and rv.size()==(r-mid)); for(int i=l;i<mid;++i) ans[i]=lv[i-l]; for(int i=mid;i<r;++i) ans[i]=rv[i-mid]; bquery(l, mid, n, ans); bquery(mid, r, n, ans); } vc<int> inv(vc<int> ans){ vc<int> ret(ans.size()); for(int i=0;i<ans.size();++i) ret[ans[i]]=i; return ret; } vc<int> restore_permutation(int n, int w, int r){ badd(0, n, n); compile_set(); vc<int> ans(n); for(int i=0;i<n;++i) ans[i]=i; bquery(0, n, n, ans); return inv(ans); } /*int main(){ int n=4; p={2, 1, 3, 0}; vc<int> ans= restore_permutation(n, 0, 0); for(int i=0;i<n;++i) cout << ans[i]<<" ";cout << '\n'; cout << cw << " "<< cr << endl; }*/

Compilation message (stderr)

In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from messy.cpp:1:
messy.cpp: In function 'void bquery(int, int, int, std::vector<int>&)':
messy.cpp:66:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   66 |     assert(lv.size()==(mid-l) and rv.size()==(r-mid));
      |            ~~~~~~~~~^~~~~~~~~
messy.cpp:66:44: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   66 |     assert(lv.size()==(mid-l) and rv.size()==(r-mid));
      |                                   ~~~~~~~~~^~~~~~~~~
messy.cpp: In function 'std::vector<int> inv(std::vector<int>)':
messy.cpp:76:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |     for(int i=0;i<ans.size();++i) ret[ans[i]]=i;
      |                 ~^~~~~~~~~~~
#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...