#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
string s;
pair<int,int>p[200007];
int ans[200007];
char b[200007];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;++i){
int m;
cin>>m>>s;
if(m==1){
cout<<1<<"\n";
continue;
}
for(int j=0;j<m;++j)
p[j]={s[j]-'0',j};
sort(p,p+m);
int pos=m;
ans[p[0].second]=1;
for(int j=1;j<m;++j){
if(p[j].second<p[j-1].second){//遇到比前一个数字大的并且出现的位置在它之前的
pos=j;//就此截断
break;
}
else
ans[p[j].second]=1;//出现的位置比前一个晚,都染成1没问题
}
int now=pos;
while(now<m&&p[now].first==p[pos].first&&p[now].second<p[pos-1].second){
++now;
ans[p[now-1].second]=2;//数字和pos截断点的数字一样大并且出现的位置也都小于截断点之前的位置,全部染成2
}
for(int j=now;j<m;++j){
if(p[j].first==p[pos].first)//此时now所在位置的元素要么比pos所在的元素要大,要么出现的位置就比pos要晚
ans[p[j].second]=1;//如果是出现的位置晚的话染成1
else
ans[p[j].second]=2;//如果是更大的话染成2
}
int cnt=0;
for(int j=0;j<m;++j)
if(ans[j]==1)
b[++cnt]=s[j];
for(int j=0;j<m;++j)
if(ans[j]==2)
b[++cnt]=s[j];
int flag=0;
for(int j=2;j<=m;++j)
if(b[j]<b[j-1])//把染好色的数组分别按照1,2放进b数组进行检查,如果不是非递减序,则输出-,否则输出染色答案
flag=1;
if(flag)
cout<<"-";
else
for(int j=0;j<m;++j)
cout<<ans[j];
cout<<"\n";
}
return 0;
}

Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)C的更多相关文章

  1. 状压DP--Rotate Columns (hard version)-- Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)

    题意:https://codeforc.es/problemset/problem/1209/E2 给你一个n(1-12)行m(1-2000)列的矩阵,每一列都可以上下循环移动(类似密码锁). 问你移 ...

  2. Cow and Snacks(吃点心--图论转换) Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)

    题意:https://codeforc.es/contest/1209/problem/D 有n个点心,有k个人,每个人都有喜欢的两个点心,现在给他们排个队,一个一个吃,每个人只要有自己喜欢的点心就会 ...

  3. Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2) G1. Into Blocks (easy version)

    题目:https://codeforc.es/contest/1209/problem/G1 题意:给你一个序列,要你进行一些操作后把他变成一个好序列,好序列的定义是,两个相同的数中间的数都要与他相同 ...

  4. Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)

    怎么老是垫底啊. 不高兴. 似乎 A 掉一道题总比别人慢一些. A. Paint the Numbers 贪心,从小到大枚举,如果没有被涂色,就新增一个颜色把自己和倍数都涂上. #include< ...

  5. codeforces(Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) )(C,D)

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) B. Verse Pattern 水题

    B. Verse Pattern 题目连接: http://codeforces.com/contest/722/problem/B Description You are given a text ...

  7. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined)(set容器里count函数以及加强for循环)

    题目链接:http://codeforces.com/contest/722/problem/D 1 #include <bits/stdc++.h> #include <iostr ...

  8. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) A B C D 水 模拟 并查集 优先队列

    A. Broken Clock time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  9. 二分 Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) D

    http://codeforces.com/contest/722/problem/D 题目大意:给你一个没有重复元素的Y集合,再给你一个没有重复元素X集合,X集合有如下操作 ①挑选某个元素*2 ②某 ...

随机推荐

  1. python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。

    python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明. 重难点:通过input函数输入的行消息为字符串格式,必须转换为整型,否则 ...

  2. python GIL锁与多cpu

    多核CPU   linux : cat /proc/cpuinfo 如果你不幸拥有一个多核CPU,你肯定在想,多核应该可以同时执行多个线程. 如果写一个死循环的话,会出现什么情况呢? 打开Mac OS ...

  3. 官方不再支持Python2,如何将你的项目完美迁移到Python3?

    Python 2.x 很快就要失去官方支持了,不过不用慌,从 Python 2 迁移到 Python 3 却并没有想象中那么难.我在上周用了一个晚上的时间将一个 3D 渲染器的前端代码及其对应的 Py ...

  4. 深度学习之反向传播算法(BP)代码实现

    反向传播算法实战 本文仅仅是反向传播算法的实现,不涉及公式推导,如果对反向传播算法公式推导不熟悉,强烈建议查看另一篇文章神经网络之反向传播算法(BP)公式推导(超详细) 我们将实现一个 4 层的全连接 ...

  5. RedHat7.0 网络源的配置

    RedHat7.0 yum源的配置 写这篇随笔的目的 为了记录自己的操作,能够为以后的再次配置提供参考 因为网上的教程都有些年代了,为了方便其他同学方便配置 提高下自己的写作水平 参考资料 RedHa ...

  6. Spring 7种事务传播类型

    转载:https://www.cnblogs.com/originate918/p/6226342.html PROPAGATION_REQUIRED及其他6种事务传播行为种类. Spring在Tra ...

  7. 【Hibernate QBC】

    HibernateQBC public class HibernateQBC { //演示离线查询 @Test public void testSelect6() { SessionFactory s ...

  8. Hadoop之伪分布式安装

    一.Hadoop的安装模式有3种 ①单机模式:不能使用HDFS,只能使用MapReduce,所以单击模式主要用于测试MR程序. ②伪分布式模式:用多个线程模拟真实多台服务器,即模拟真实的完全分布式环境 ...

  9. 如何把web项目部署到Linux云服务器(详细流程)

    转自: https://blog.csdn.net/M_Kerry/article/details/81664548

  10. 【笔记3-用户模块】从0开始 独立完成企业级Java电商网站开发(服务端)

    数据表结构设计 关系设计 为什么不用外键? 分库分表有外键会非常麻烦,清洗数据也很麻烦.数据库内置触发器也不适合采用. 查业务问题的后悔药--时间戳 create_time 数据创建时间 update ...