QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#324781 | #962. Thanks to MikeMirzayanov | linak | WA | 1ms | 3856kb | C++14 | 3.2kb | 2024-02-11 00:04:04 | 2024-02-11 00:04:05 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
int a, k[20001], ka[20001];
vector<vector<int>> ans;
void oper(vector<int>& part) {
int h = a, p = 0;
for (int u : part) {
h -= u;
for (int i = 1; i <= u; i++) ka[p + i] = k[h + i];
p += u;
}
for (int i = 1; i <= a; i++) k[i] = ka[i];
}
void rec(vector<int>& part, int op = 0) {
if (part.size() == a) {
if (op & 1) {
vector<int> t;
for (int i = 1; i <= a; i++) t.push_back(1);
ans.push_back(t);
}
return;
}
vector<vector<int>> p;
bool two = true;
int h = 0;
for (int u : part) {
vector<int> tmp;
if (u == 1) {
tmp.push_back(1);
h++;
} else {
int l = 1e9, r = 0;
for (int i = h + 1; i <= h + u; i++) l = min(l, k[i]), r = max(r, k[i]);
int mid = (l + r) / 2, e = 1;
for (int i = h + 2; i <= h + u; i++) {
if ((k[i] <= mid) ^ (k[i - 1] <= mid)) {
tmp.push_back(e);
e = 1;
} else
e++;
}
tmp.push_back(e);
h += u;
if (tmp.size() > 2) two = false;
}
p.push_back(tmp);
}
vector<int> nxt, d;
h = 0;
if (two) {
for (auto u : p) {
if (u.size() == 1) {
h += u[0];
d.push_back(u[0]);
} else {
h += u[0];
if ((k[h] > k[h + u[1]]) ^ (op & 1)) {
d.push_back(u[0] + u[1]);
} else {
d.push_back(u[0]);
d.push_back(u[1]);
}
h += u[1];
}
}
if(d.size()!=1) ans.push_back(d);
reverse(d.begin(),d.end());
oper(d);
for (auto u : p) {
for (int v : u) nxt.push_back(v);
}
reverse(nxt.begin(), nxt.end());
rec(nxt, op + 1);
} else {
for (auto u : p) {
d.push_back(u[0]);
for (int i = 1; i < u.size(); i += 2) {
if (i == u.size() - 1)
d.push_back(u[i]);
else if (i % 4 == 1)
d.push_back(u[i] + u[i + 1]);
else {
d.push_back(u[i]);
d.push_back(u[i + 1]);
}
}
}
if(d.size()!=1) ans.push_back(d);
reverse(d.begin(), d.end());
oper(d);
reverse(part.begin(), part.end());
rec(part, op + 1);
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> a;
for (int i = 1; i <= a; i++) cin >> k[i];
vector<int> t;
t.push_back(a);
rec(t);
cout << ans.size() << "\n";
for (auto u : ans) {
cout << u.size() << " ";
for (int v : u) cout << v << " ";
cout << "\n";
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 3804kb
input:
4 3 1 2 4
output:
3 2 1 3 3 1 1 2 4 1 1 1 1
result:
ok OK
Test #2:
score: 0
Accepted
time: 0ms
memory: 3856kb
input:
6 6 5 4 3 2 1
output:
3 4 1 2 1 2 4 2 1 2 1 6 1 1 1 1 1 1
result:
ok OK
Test #3:
score: 0
Accepted
time: 1ms
memory: 3628kb
input:
1 1
output:
0
result:
ok OK
Test #4:
score: -100
Wrong Answer
time: 0ms
memory: 3592kb
input:
10 3 8 7 4 6 2 9 10 1 5
output:
8 5 1 3 1 1 4 3 2 6 2 2 5 5 5 3 2 1 3 1 3 3 2 5 8 2 1 1 1 1 1 1 2 7 3 1 1 1 1 1 2 9 2 1 1 1 1 1 1 1 1
result:
wrong answer the permutation is not sorted