3.19 每日一题题解

Minimize The Integer

题目链接:https://codeforces.com/problemset/problem/1251/C

涉及知识点:

  • 思维/模拟

solution:

  • 奇数可以和相邻的偶数换位置,偶数可以和相邻的奇数换位置
  • 这就保证了所有的奇数的相对位置不会改变,偶数也一样,你可以理解成135这个字符串任意相邻位置都无法交换,只能保持135的顺序
  • 我们可以用两个vector数组,一个存奇数,一个存偶数,队首元素谁小先输出谁,这样能保证最后的字符串是字典序最小
  • 样例3,输入234642,对应的两个数组 :v1[] = { 2 , 4 , 6 , 4 , 2} , v2[] =

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;
}
posted @ 2020-03-19 14:21  QFNU-ACM  阅读(103)  评论(0编辑  收藏  举报