题意: 染色,如何使得,1和2部分连接起来为上升序列,看数据能想到枚举0到9,但emmm卡在了处理问题,之后知道可以枚举就瞎写判断a了。要大胆些emmm,应该20分钟搞定的害…
#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5+10;
int sum[maxn];
int a[maxn];
int dp[maxn];
int h[maxn];
char ans[maxn];
int n;
bool check(int x)
{
int d,xiao;
d=0x3f3f3f3f,xiao=0;
int dd=x,ddd=0;
for(int i=1;i<=n;i++){
if(a[i]>x&&a[i]>=dd){
dd=a[i];
d=min(d,i);
ans[i]='2';
}else if(a[i]<x&&a[i]>=ddd){
xiao=i;ddd=a[i];
ans[i]='1';
}else if(a[i]!=x)return false;
}
for(int i=1;i<=n;i++){
if(a[i]==x){
if(i>xiao){
ans[i]='1';
}else if(i<d){
ans[i]='2';
}else return false;
}
}
return true;
}
int main()
{
int t;
cin>>t;
while(t--){
scanf("%d",&n);
string str;
cin>>str;
for(int i=1;i<=str.length();i++){
a[i]=str[i-1]-'0';
}
int A=-1,B=-1;
int Yes=0;
for(int i=0;i<=9;i++){
if(check(i)){
Yes=1;
break;
}
}
ans[n+1]='\0';
if(Yes){
puts(ans+1);
}else
{
cout<<"-"<<endl;
}
}
}