C. Minimize The Integer(贪心)

Posted iss-ue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C. Minimize The Integer(贪心)相关的知识,希望对你有一定的参考价值。

传动门前往传送门

(看完题解后觉得自己好蠢......)

(相信大部分人会先拿样例做实验)

(可以从前往后贪心,第一个位置只可以和后面的第一个不同类的数交换)

(基于这个,我们可以写出一个O(n^2)的算法)

(因为找后面第一个不同类的数和找到后进行冒泡交换的时间都难以优化!!)

(color{Red}{但是,有时候我们只考虑结果不考虑过程,这才是贪心})

(其实上面发现规律的本质是奇数向左或者向右交换都有一道鸿沟)

(那就是不能到上一个奇数之前,不能到下一个奇数之后,除此之外任意)

(color{Orange}{那么,只需要维护最终的序列奇数相对位置不变,偶数相对位置不变})

(那么每次取最前的奇数和偶数比较大小,看看哪个小直接输出)

#include <bits/stdc++.h>
using namespace std;
const int maxn=3e5+9;
int ou[maxn],top;
int ji[maxn],cnt;
string s;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		top=cnt=0;
		cin>>s;
		for(int i=0,l=s.length();i<l;i++)
		{
			int k=s[i]-‘0‘;
			if(k%2==1)	ji[++cnt]=k;
			else	ou[++top]=k;
		}
		int i,j;
		for(i=1,j=1;i<=cnt&&j<=top;)
		{
			if(ou[j]<ji[i])	printf("%d",ou[j++]);
			else	printf("%d",ji[i++]);	
		}
		while(i<=cnt)	printf("%d",ji[i++]);
		while(j<=top)	printf("%d",ou[j++]);
		cout<<endl;
	}
}

以上是关于C. Minimize The Integer(贪心)的主要内容,如果未能解决你的问题,请参考以下文章

Educational Codeforces Round 75 (Rated for Div. 2) C. Minimize The Integer

codeforces 19/10/24 div2C. Minimize The Integer

Minimize the error CodeForces - 960B

PAT Advanced 1038 Recover the Smallest Number (30) [贪?算法]

[LeetCode] 1877. Minimize Maximum Pair Sum in Array

C. The Phone Number