제출 #428789

#제출 시각아이디문제언어결과실행 시간메모리
428789lycCheerleaders (info1cup20_cheerleaders)C++14
26 / 100
2072 ms2164 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 inv() { int cnt = 0; FOR(i,0,(1<<N)-1){ FOR(j,0,i-1){ if (A[j] > A[i]) ++cnt; } } 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]; } 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)); } } 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...