首页 > 其他分享 >codeforces 598 div3 Minimize the Permutation(贪心找规律)

codeforces 598 div3 Minimize the Permutation(贪心找规律)

时间:2022-12-12 19:38:50浏览次数:46  
标签:idx Minimize 598 codeforces pos int swap arrmv initpos


题目大意:

有n个排列数。现在定义操作:

交换第i和i+1个元素。我们对每个i位置只能操作一次。问经过这种操作后,我们最少能够得到的字典序序列是多少。

解题思路:

我们贪心从小到大选择数往前挪,我们需要维护一个位置,这个位置是指我们从右到左最多只能移动到这个位置。有没有可能我们想把数字从左运动右呢?这里我们因为是字典序,每次只关心我们的目标数能不能放在前面,所以我们不关心能不能向右挪。另外我们挪动的时候假若中间遇到了比你小的数字,这时候就不要挪了。

#include <bits/stdc++.h>
using namespace std;
int main() {
int cas; cin >> cas;
while (cas--) {
int n; cin >> n;
vector<int> arrmv(n);
for (int i = 0; i<n; i++)cin >> arrmv[i];
int swap_idx = 0;
int pos, initpos;
initpos = 0;
int suc=0;
for (int no = 1; no <= n; no++) {
if (!suc)swap_idx = initpos;
if (swap_idx == n - 1)break;
suc = 0;
for (int i = 0; i<n; i++) {
if (arrmv[i] == no) {
initpos = pos = i;
break;
}
}
if (pos <= swap_idx) { suc = 1; continue; }
else {
while (pos - 1 >= swap_idx && arrmv[pos - 1]>arrmv[pos]) {
swap(arrmv[pos - 1], arrmv[pos]);
pos--;
}
}
}
for (auto it : arrmv) { cout << it << " "; }
cout << endl;
}
return 0;
}

 

标签:idx,Minimize,598,codeforces,pos,int,swap,arrmv,initpos
From: https://blog.51cto.com/u_15910522/5931525

相关文章

  • codeforces ECR 74 Standard Free2play(找规律)
    题目大意:有一座山,山有h层。每一层都有平台。有些平台凸出来,有些平台是凹进去。主角一开始站在h层平台,他的目标是落到第0层。主角能够下山的方式只有一种:让高为x的平台和高为......
  • codeforces 596 div2 p-binary(数位复杂度压缩)
    题目大意:已知: 同时  ,问k最少为多少。解题思路:首先,我们看到这里有2的n次方,我们考虑能不能从二进制表示下手,我们通过移位来表示:得到公式 ,很直接的想法是我们让k从小到大......
  • codeforces 594 div2 Ivan the Fool and the Probability Theory (DP 推公式)
    题目大意:现在有n*m个格子。然后我们可以对这些格子染上黑色或者白色。规定每个格子最多允许相邻1个与它同样颜色的格子,问你我们有多少中不同的染色方案。解题思路:首先考虑1*......
  • codeforces 1354D - Multiset (线段树或者2分)
    题目大意:已知一个数列an,我们每次可以添加一个数k,或者把第k大的数字去掉。问我们经过k次操作后,数列中任意1个剩余的数字。n,q<=1e6解题思路:首先最简单的思路是线段树。线段......
  • Codeforces Round #837 (Div. 2)D (最大回文字串+树)
    题目链接:D.Hossamand(sub-)palindromictree题目描述给定一颗有n(n<=2e3)个顶点的树,每个顶点有一个点权(字符),定义s(u,v)为从u到v的简单路径所经过的点权形成的字符......
  • Codeforces Round #837 (Div. 2)补题
    CodeforcesRound#837(Div.2)A.HossamandCombinatorics知识点:简单题复杂度:\(O(nlogn)\)很明显能看出,该题与数据的位置无关,只与大小有关所以我们可直接排序,判断......
  • 题解 CodeForces 940E Cashback
    1.题面描述题目链接给定长为\(n\)的序列和一个整数\(c\),你需要将其分为若干段。对于每一段,若其长度为\(k\),则可以删除其中前\(\lfloor\frac{k}{c}\rfloor\)小的......
  • Codeforces Round #821 (Div. 2)
    比赛链接A题意:给定一个长度为n的数组,你可以任意交换两个距离为k的数,求最大的连续k个数组之和。核心思路:这个我们直接暴力就好了,我们可以把那些距离为k的比较大的全都换......
  • Educational Codeforces Round 134 (Rated for Div. 2)
    比赛链接A题意:给定4个字符串,每次可以将一种字符串变成另一个字符串,请求最少的操作使得所有字符串相同。核心思路:就是一个找规律的题目,哈哈哈,看多了jly的代码还是有好处......
  • Codeforces Beta Round #2 C. Commentator problem
    题意二维平面上,给定三个圆的原点和半径,求一个点到三个圆的视角相同。三个圆心不共线。思路用(距离/半径)表示视角大小,用方差表示视角的波动。用爬山算法从重心开始四......