QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#324781#962. Thanks to MikeMirzayanovlinakWA 1ms3856kbC++143.2kb2024-02-11 00:04:042024-02-11 00:04:05

Judging History

This is the latest submission verdict.

  • [2024-02-11 00:04:05]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3856kb
  • [2024-02-11 00:04:04]
  • Submitted

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";
    }
}

Details

Tip: Click on the bar to expand more detailed information

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