CF1209C Paint the Digits

CF1209C Paint the Digits

题意:给定T组数据,每组数据第一行输入数字串长度,第二行输入数字串,用数字1和2对数字串进行涂色,被1涂色的数字子串和被2涂色的数字子串拼接成新的数字串,要求新的数字串是非递减的。

题解:对原数字串进行排序,然后从后往前和从前往后各涂一次,若涂不完则输出“-”。

#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
using namespace std;
string a,b;
int vis[200005];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        cin>>a;
        b=a;
        memset(vis,0,sizeof(vis));
        sort(b.begin(),b.end());
        int pos1=n-1;
        for(int i=n-1;i>=0;i--)
        {
            if(b[pos1]==a[i])
            {
                vis[i]=2;
                pos1--;
            }
        }
        pos1=pos1+1;
        int pos2=0;
        for(int i=0;i<n;i++)
        {
            if(vis[i]==0&&a[i]==b[pos2])
            {
                vis[i]=1;
                pos2++;
            }
        }
        if(pos1!=pos2)
            cout<<'-'<<endl;
        else
        {
            for(int i=0;i<n;i++)
                cout<<vis[i];
            cout<<endl;
        }
    }
}
原文地址:https://www.cnblogs.com/-citywall123/p/11587433.html