Minimize The Integer
题意:
有一个序列,如果相邻的两个数的奇偶性不同,就可以把它们交换。问得到的最小的序列是什么。
思路:
根据题意我们可以理解为相同奇偶性的数字顺序是不能变的,能变得只是不同奇偶性的数字。
所以我们可以通过两个队列来分别按顺序存储奇数和偶数,然后判断大小依次输出就行。
AC代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e6 + 10;
typedef long long ll;
char s1[N],s2[N];
int main()
{
int t;cin>>t;
while(t --)
{
string s;cin>>s;
int len = s.size();
int pos1 = 0;
int pos2 = 0;
for(int i = 0 ; i < len ; i ++)
{
if((s[i] -'0') %2)
s1[pos1++] = s[i];
else
s2[pos2++] = s[i];
}
int i = 0,j = 0;
while(i < pos1 || j < pos2)
{
if(i >= pos1)
cout<<s2[j++];
else if(j >= pos2)
cout<<s1[i++];
else if(s1[i] <= s2[j])
cout<<s1[i++];
else
cout<<s2[j++];
}
cout<<endl;
}
return 0;
}