Submission #428799

#TimeUsernameProblemLanguageResultExecution timeMemory
428799lycCheerleaders (info1cup20_cheerleaders)C++14
47 / 100
2061 ms3808 KiB
#include <bits/stdc++.h> using namespace std; #define TRACE(x) cerr << #x << " :: " << x << endl #define _ << " " << #define SZ(x) ((int)(x).size()) #define ALL(x) (x).begin(),(x).end() #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define RFOR(i,a,b) for(int i=(a);i>=(b);--i) int N, org[1<<17], A[1<<17]; int ft[1<<17], n; void update(int i, int x) { for (; i <= n; i += i&-i) ft[i] += x; } int query(int i) { int r = 0; for (; i; i -= i&-i) r += ft[i]; return r; } int inv() { int cnt = 0; memset(ft,0,sizeof ft); FOR(i,0,(1<<N)-1){ cnt += i-query(A[i]); update(A[i]+1,1); } return cnt; } void sim(int op) { if (op == 1) { FOR(i,0,(1<<(N-1))-1){ swap(A[i],A[i+(1<<(N-1))]); } } else { vector<int> v[2]; FOR(i,0,(1<<N)-1) v[i&1].push_back(A[i]); FOR(i,0,(1<<(N-1))-1) A[i] = v[0][i]; FOR(i,0,(1<<(N-1))-1) A[i+(1<<(N-1))] = v[1][i]; } } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> N; FOR(i,0,(1<<N)-1){ cin >> org[i]; } n = (1<<N); int mininv = 1e9; vector<int> ans; FOR(s,0,(1<<N)-1){ FOR(i,0,(1<<N)-1){ A[i] = org[i]; } vector<int> ops; while (true) { bool done = 1; int pos0 = -1; FOR(i,0,(1<<N)-1){ done &= A[i] == i; if (A[i] == s) pos0 = i; } if (pos0 == 0) break; int op; if (pos0 < (1<<(N-1))) op = 2; else op = 1; ops.push_back(op); sim(op); } int cur = inv(), mini = 0; FOR(i,1,N-1){ sim(2); int nw = inv(); if (nw < cur) { cur = nw; mini = i; } } if (cur < mininv) { mininv = cur; FOR(i,1,mini) ops.push_back(2); ans = ops; //TRACE(cur _ SZ(ops)); } if (N > 11) break; } cout << mininv << '\n'; for (int& x : ans) { cout << x; } }
#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...