Educational Codeforces Round 47 (Rated for Div. 2) B(思维)

题意
给你一个串儿只由0,1,2组成,其中可以翻转01,10,12和21,不能翻转02和20,
问你如何翻转让新的到的串儿字典序最小。
思路
写的时候就一直卡在b题了,导致这场CF直接凉凉。。。赛后补题的时候觉得C,D都是绝世傻逼题啊,,早知道就先写C,D了,讲一下思路把,对于1来说,他可以和2换也可以和0换,那么也就是说,我们的所有的1都是可以翻到前面来的,而我们的0在没有碰到2之前也是可以翻到前面来的,但是遇到2之后就不可以了,因为无论如何我们的0都翻不过2,所以思路就有了,我们把2之前的所有的0都翻到前面来,把所有的1都翻到前面来,之后2之后的0和2顺序都不改变就好了上代码:

#include <bits/stdc++.h>
using namespace std;
string sh;
int main()
{
    cin>>sh;
    int len = sh.size();
    string ans;
    int flag = 0;
    int a = 0 , b = 0;
    for(int i = 0 ; i < len ; i ++)
    {
        if(!flag && sh[i] == '0') a++;
        if(flag && sh[i] == '0') ans+='0';
        if(sh[i] == '1') b++;
        if(sh[i] == '2') flag = 1,ans +='2';
    }
    while(a--) cout<<"0";
    while(b--) cout<<"1";
    cout<<ans<<endl;
}

猜你喜欢

转载自blog.csdn.net/wjmwsgj/article/details/81061716