Submission #66343

#TimeUsernameProblemLanguageResultExecution timeMemory
66343MANcityUnscrambling a Messy Bug (IOI16_messy)C++14
100 / 100
5 ms512 KiB
#include<iostream> #include<cstdio> #include<fstream> #include<algorithm> #include<cmath> #include<map> #include<queue> #include<set> #include<stack> #include<string> #include<cstring> #include<vector> #include "messy.h" using namespace std; #define for1(i,n) for(int i=1;i<=(int)n;i++) #define for0(i,n) for(int i=0;i<=(int)n;i++) #define forn(i,n) for(int i=n;i>=1;i--) #define fo(i,x,y) for(int i=x;i<=(int)y;i++) #define fr(i,x,y) for(int i=x;i>=(int)y;i--) #define pb push_back #define mp make_pair #define LL long long const LL Mod=1000*1000*1000+7; int n; int perm[400]; /*add_element("0"); compile_set(); check_element("0");*/ void build(int left,int right) { int m=(left+right)/2; fo(i,left,m) { string s=""; for1(j,n) { if(j<left || j>right) s+="1"; if(j==i) s+="1"; if(j!=i && j>=left && j<=right) s+="0"; } add_element(s); } if((right-left)==1) return; m=(left+right)/2; build(left,m); build(m+1,right); } void query(vector<int> v,int left,int right) { if((right-left)==1) { string s=""; for1(j,n) { if(j==v[1]) s+="0"; else s+="1"; } int t=check_element(s); if(t==1) { perm[v[0]]=left; perm[v[1]]=right; } else { perm[v[0]]=right; perm[v[1]]=left; } return; } int used[200]; for1(i,n) used[i]=0; for0(i,v.size()-1) used[v[i]]=1; vector<int> v1; vector<int> v2; for0(i,v.size()-1) { string s=""; for1(j,n) { if(used[j]==0) s+="1"; if(used[j]==1) { if(j==v[i]) s+="1"; else s+="0"; } } int t=check_element(s); if(t==1) v1.push_back(v[i]); else v2.push_back(v[i]); } int m=(left+right)/2; query(v1,left,m); query(v2,m+1,right); } vector<int> restore_permutation(int n_0, int w, int r) { n=n_0; build(1,n); compile_set(); vector<int> v; for1(i,n) v.push_back(i); query(v,1,n); vector<int> ANS; for1(i,n) ANS.pb(perm[i]-1); return ANS; }
#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...