我是菜狗

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n, num, pos;    // pos存放第k大的数idx的下标
    while (scanf("%d", &n) != EOF) {
        if (!n) continue; // 如果n为0,跳过当前循环

        vector<int> vec;
        vector<int> dis;
        vec.push_back(0);   // 保证数组从1开始存放
        int cnt = 0;        // 表示所有数需要反转的次数

        // 输入数组
        for (int i = 0; i < n; i++) {
            scanf("%d", &num);   // 数字是1-n
            vec.push_back(num);
        }

        // 煎饼排序
        for (int idx = n; idx >= 1; idx--) {
            // 判断是否在最终位置上
            if (vec[idx] == idx) {
                continue;
            }
            else {
                // 找到当前最大值的下标
                for (int i = 1; i <= n; i++) {
                    if (vec[i] == idx) {
                        pos = i;
                        break;
                    }
                }

                // 如果最大值不在最上面,翻转1到pos(如果最大值在最前面,则少一次翻转)
                if (pos != 1) {
                    reverse(vec.begin() + 1, vec.begin() + pos + 1);
                    dis.push_back(pos);
                    cnt++;
                }

                // 翻转1到idx,将最大值放到正确位置
                reverse(vec.begin() + 1, vec.begin() + idx + 1);
                dis.push_back(idx);     // 每次翻转的次数与距离都要记录
                cnt++;
            }
        }

        // 输出结果
        printf("%d", cnt);
        for (auto it = dis.begin(); it != dis.end(); it++) {
            printf(" %d", *it);
        }
        printf("\n");
    }
    return 0;
}