Loading

A-Sort (构造)

勿急

#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define PII pair<int, int>

using namespace std;
const int N = 1010;
vector<PII> ans;
int n, T, t, w[N], tmp[N];

void swap(int* A, int l1,int r1, int l2, int r2){
    memcpy(tmp, w, sizeof(int) * (n + 5));
    int idx = l1;
    for(int i = l2;i <= r2;i++) w[idx++] = tmp[i];
    for(int i = l1;i <= r1;i++) w[idx++] = tmp[i];
}
int fx(int x){
    if(x > n) x-= n;
    if(x < 1) x+= n;
    return x;
}
void solve(){
    cin >> n >> t; ans.clear();
    for(int i = 1;i <= n;i++) cin >> w[i];
    if(n == 1){cout << 0;return;}
    bool isOK = false; int idx = -1;
    for(int st = 1;st <= n;st++){
        bool f = true;
        for(int j = st + 1;j <= st + n - 1;j++){
            int nw = fx(j);
            int pr = fx(j-1);
            if(w[nw] < w[pr]){f = false; break;}
        }
        if(f){isOK = true; idx = st; break;}
    }
    if(t == 1) cout << ((isOK && idx == 1) ? 0 : -2);
    else if(t == 2){
        if(not isOK) cout << -2;
        else{
            if(idx == 1) cout << 0;
            else{
                cout << "1\n2\n0 " << idx - 1 << " " << n << "\n2 1";
            }
        }
    }else{
        for(int i = 1;i < n;i++){
            int mn = INT_MAX; int idx = -1;
            for(int j = i;j <= n;j++){
                if(w[j] <= mn){
                    mn = w[j];
                    idx = j;
                }
            }
            if(idx == i)continue;
            swap(w, i, idx - 1,idx, n);
            ans.push_back({i - 1, idx - 1});
        }
        if(ans.empty()){ cout << 0;return;}

        cout << ans.size() << '\n';
        for(int i = 0;i < ans.size();i++){
            auto& p = ans[i];
            if(p.first == 0) cout << "2\n0 " << p.second << " " << n << "\n2 1";
            else cout << "3\n0 " << p.first << " " << p.second << " " << n << "\n1 3 2";

            if(i + 1 < ans.size()) cout << '\n';
        }
    }

}

int main(){
    //ios::sync_with_stdio(0);cin.tie(0);
    cin >> T;
    while(T--){
        solve();
        if(T) cout << '\n';
    }
}
posted @ 2021-09-27 11:20  —O0oO-  阅读(70)  评论(0编辑  收藏  举报