#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n, k;
    cin >> n >> k;

    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }

    int minOps = 0;
    for (int i = 0; i < n; i++) {
        if (nums[i] != i + 1) {
            int j = i + 1;
            while (nums[j] != i + 1) {
                j++;
            }
            if (j - i > k) {
                minOps = -1;
                break;
            }
            for (int l = j; l > i; l--) {
                swap(nums[l], nums[l - 1]);
                minOps++;
            }
        }
    }

    cout << minOps << endl;

    return 0;
}

这段代码首先读入数列的长度n和交换两个数的距离k。然后读入数列的元素。接下来使用一个循环,对于每个元素检查是否在正确位置上,如果不在,则找到正确位置并进行交换操作。注意要判断交换的距离是否小于k,如果不满足则无法排序。最后输出最少操作次数

话接上回因为小石头脑力不行那道题直接把他的CPU烧了使它忘记了怎么复原魔方傅yx大佬为了让他想起来便给了他一个像一条线一样的益智玩具当中有n个数这个玩具的规则是:每次只能交换两个数且两个数的距离小于k最后将这个数列从小到大排序傅yx大佬的问题是:要想将这个数列从小到大排序最少操作次数是多少?因为小石头大脑受损做不出来所以它想让你用程序完成这道题。有一个有n个数的不规则数列每次交换其中的两个数且让两

原文地址: https://www.cveoy.top/t/topic/ialI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录