Submission #1301393

#TimeUsernameProblemLanguageResultExecution timeMemory
1301393DeltaStructUnscrambling a Messy Bug (IOI16_messy)C++20
49 / 100
1 ms576 KiB
#include <bits/stdc++.h> using namespace std; #include "messy.h" vector<int> restore_permutation(int n,int w,int r){ int m = 0; while((1<<m)!=n) ++m; string s(n,'1'); for (int i(0);i < 3;++i) s[i] = '0',add_element(s); s = string(n,'0'); for (int i(0);i < n;++i) for (int k(0);k < 7;++k) if ((i>>k)&1){ for (int j(0);j < 3;++j) s[j] = '0'+((k>>j)&1); s[i] = '1',add_element(s),s[i] = '0'; for (int j(0);j < 3;++j) s[k] = '0'; } compile_set(); vector<int> R(n,-1),T; if (m!=7){ string s(n,'1'); for (int i(0);i < n;++i){ s[i] = '0'; if (check_element(s)){ R[i] = 0,T.emplace_back(i); break; } else s[i] = '1'; } for (int i(0);i < n;++i) if (R[i]==-1){ s[i] = '0'; if (check_element(s)){ R[i] = 1,T.emplace_back(i); break; } else s[i] = '1'; } for (int i(0);i < n;++i) if (R[i]==-1){ s[i] = '0'; if (check_element(s)){ R[i] = 2,T.emplace_back(i); break; } else s[i] = '1'; } for (int i(0);i < n;++i) if (R[i]==-1) R[i] = 0; for (int i(0);i < n;++i) if (R[i]==0&&i!=T[0]) for (int k(0);k < 7;++k){ string s(n,'0'); for (int j(0);j < 3;++j) if ((k>>j)&1) s[T[j]] = '1'; s[i] = '1',R[i] |= (1<<k)*check_element(s),s[i] = '0'; for (int j(0);j < 3;++j) s[T[j]] = '0'; } } else { vector<int> T; string t(n,'1'),s(n,'0'); vector<vector<int>> segtree(2*n); segtree[1].resize(n); iota(segtree[1].begin(),segtree[1].end(),0); for (int l(1),r(2),k(0);l < n;l<<=1,r<<=1,++k){ if ((1<<(int)T.size())==k) for (int i(0);i < n;++i) if (t[i]=='1'){ t[i] = '0'; if (check_element(t)){ R[i] = T.size(),T.emplace_back(i); break; } t[i] = '1'; } for (int i(0);i < 3;++i) if ((k>>i)&1) s[T[i]] = '1'; for (int j(l);j < r;++j) for (int i:segtree[j]) if (t[i]=='1'){ if (segtree[j<<1].size()+segtree[j<<1|1].size()+1==segtree[j].size()&&segtree[j].size()==(1<<m-k)){ if (segtree[j<<1].size()<segtree[j<<1|1].size()) segtree[j<<1].emplace_back(i); else segtree[j<<1|1].emplace_back(i); } else { s[i] = '1'; if (check_element(s)) segtree[j<<1|1].emplace_back(i); else segtree[j<<1].emplace_back(i); s[i] = '0'; } } for (int i:T) s[i] = '0'; } for (int i(3);i < n;++i) R[i] = segtree[n+i][0]; } return R; }

Compilation message (stderr)

messy.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
messy_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...