记录编号 38381 评测结果 WAWWWWWWWW
题目名称 排序 最终得分 10
用户昵称 Gravatar王者自由 是否通过 未通过
代码语言 C++ 运行时间 0.044 s
提交时间 2012-04-18 11:50:59 内存使用 0.13 MiB
显示代码纯文本
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 25;
int n, a[N], b[N], c[N], d[N], s[N*2];
void Do(int x) {
    if(x == 1) return;
    s[++s[0]] = x;
    for(int i=1; i<=x/2; i++) {
        swap(a[i], a[x-i+1]);
        swap(d[c[i]], d[c[x-i+1]]);
        swap(c[i], c[x-i+1]);
    }
}
bool Sorted(int x) {
    for(int i=x; i<=n; i++)
        if(a[i] != b[i]) return false;
    return true;
}
int main() {
    freopen("sorta.in", "r", stdin);
    freopen("sorta.out", "w", stdout);
    scanf("%d", &n);
    for(int i=1; i<=n; i++) {
        scanf("%d", a+i);
        b[i] = a[i];
    }
    sort(b+1, b+n+1);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            if(!c[i] && !d[j] && a[i] == b[j]) {
                c[i] = j; //元素的秩
                d[j] = i; //秩对应的元素
                break;
            }
    for(int i=n; i>1; i--) {
        if(Sorted(i)) continue;
        Do(d[i]);
        if(Sorted(i)) continue;
        Do(i);
    }
    printf("%d\n", s[0]);
    for(int i=1; i<s[0]; i++)
        printf("%d ", s[i]);
    printf("%d\n", s[s[0]]);
    return 0;
}