标签:Minimize 读题 CF1256B flag num Permutation
CF1256B - Minimize the Permutation(源地址自⇔CF1256B)
目录Problem
tag:
⇔贪心、⇔排序、⇔暴力、⇔提高级(*1400)
题意:
对于给定的全排列,至多进行 \(n - 1\) 次操作,使得最终结果的字典序最小。操作规则如下:
- 每次操作可以交换位于 \(i\) 和 \(i - 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。