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; } } }