Minimize The Integer
题目链接:https://codeforces.com/problemset/problem/1251/C
涉及知识点:
- 思维/模拟
solution:
- 奇数可以和相邻的偶数换位置,偶数可以和相邻的奇数换位置
- 这就保证了所有的奇数的相对位置不会改变,偶数也一样,你可以理解成135这个字符串任意相邻位置都无法交换,只能保持135的顺序
- 我们可以用两个vector数组,一个存奇数,一个存偶数,队首元素谁小先输出谁,这样能保证最后的字符串是字典序最小
- 样例3,输入234642,对应的两个数组 :v1[] = { 2 , 4 , 6 , 4 , 2} , v2[] = { 3 }
std:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int t;
cin>>t;
while(t--)
{
vector<int> v1,v2;
string s;
cin>>s;
int len = s.length();
for(int i=0;i<len;i++){
int x = s[i] - '0';
if(x%2)
v1.push_back(x);
else
v2.push_back(x);
}
int i , j;
for(i=0,j=0;i<v1.size()&&j<v2.size();){
if(v1[i] < v2[j])
cout<<v1[i++];
else
cout<<v2[j++];
}
if(i < v1.size()){
for( ; i < v1.size() ; i++)
cout<<v1[i];
}
if(j < v2.size()){
for( ; j < v2.size() ; j++)
cout<<v2[j];
}
cout<<endl;
}
return 0;
}