其他分享
首页 > 其他分享> > CF1256B - Minimize the Permutation(贪心+排序+暴力+提高级)

CF1256B - Minimize the Permutation(贪心+排序+暴力+提高级)

作者:互联网

CF1256B - Minimize the Permutation(源地址自⇔CF1256B

目录

Problem

tag:

⇔贪心、⇔排序、⇔暴力、⇔提高级(*1400)

题意:

对于给定的全排列,至多进行 \(n - 1\) 次操作,使得最终结果的字典序最小。操作规则如下:

思路:

(朱老师)带限制的冒泡排序。

(自己)其实一开始做这题的时候,读题出现了问题,没有注意到“每个操作至多进行一次”这个条件,导致题目想了好久好久,还WA了一次。重新读题后个人理解:暴力,按照元素从小到大,依次向前进行冒泡排序;限制1,使用 flag[i] 数组标记 \(i\) 位置是否被操作过;限制2,使用 num 变量标记一共进行了多少次循环。

AC代码:

ms(flag, true);
S(n);
FOR(i, 1, n) S(a[i]);
FOR(q, 1, n) {
    FOR(i, 1, n) {
        if(a[i] == q && num < n) {//find 'q'
            FORD(j, 2, i) {//swap the number which before the 'q'
                if(a[j - 1] > a[j] && flag[j - 1] == true) {
                    swap(a[j], a[j - 1]);
                    num ++;
                    flag[j - 1] = false;
                }
            }
        }
    }    
}

FOR(i, 1, n) cout << a[i] << " ";
cout << endl;

错误次数

(队内赛1)读题错误

(队内赛2)忘记增加冒泡条件:仅 a[j - 1] < a[j] 时才进行交换。

(补题1)读题错误


文 / WIDA
2021.12.17成文
首发于WIDA个人博客,仅供学习讨论


更新日记:
2021.12.17 成文


标签:Minimize,读题,CF1256B,flag,num,Permutation
来源: https://www.cnblogs.com/WIDA/p/15704113.html