题目链接:http://codeforces.com/contest/1102/problem/D

题目大意:给你一个字符串,这个字符串是由0,1,2构成的,然后让你替换字符,使得在替换的次数最少的前提下,使得新获得的字符串中0,1,2这三个字 符的数目相同,并且新获得的字符串字典序要尽可能的小。

具体思路: 我们先统计出每个字符的个数,想一下,除了三个都相等的情况下,这三个中的某一个肯定是大于n/3的,我们就枚举每一个字符。

如果是2多的话,我们就用1和0从前面进行替换。

如果是1多的话,我们就用2和0进行替换,为了保证字典序最小,我们将0从前面进行替换,2从后面进行替换,

如果是0多的话,我们就从后面开始替换,先从2开始,然后再从1开始。

AC代码:

 #include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5+;
int num[];
char str[maxn];
int main()
{
int len;
scanf("%d",&len);
scanf("%s",str);
for(int i=; i<len; i++)
{
num[str[i]-'']++;
}
int tmp=len/;
if(num[]>tmp)
{
for(int i=len-; i>=; i--)
{
if(str[i]=='')
{
if(num[]<tmp&&num[]>tmp)
{
num[]++,num[]--,str[i]='';
}
else if(num[]<tmp&&num[]>tmp)
{
num[]++,num[]--,str[i]='';
}
}
}
}
if(num[]>tmp)
{
for(int i=; i<len; i++)
{
if(str[i]=='')
{
if(num[]<tmp&&num[]>tmp)
{
num[]++,num[]--,str[i]='';
}
}
}
for(int i=len-; i>=; i--)
{
if(str[i]=='')
{
if(num[]<tmp&&num[]>tmp)
{
num[]++;
num[]--;
str[i]='';
}
}
}
}
if(num[]>tmp)
{
for(int i=; i<len; i++)
{
if(str[i]=='')
{
if(num[]<tmp&&num[]>tmp)
{
num[]++;
num[]--;
str[i]='';
}
else if(num[]<tmp&&num[]>tmp)
{
num[]++;
num[]--;
str[i]='';
}
}
}
}
printf("%s\n",str);
}

D - Balanced Ternary String (贪心)的更多相关文章

  1. Codeforces Round #531 (Div. 3) D. Balanced Ternary String (贪心)

    题意:给你一个长度为\(3*n\)的字符串,要求修改最少的次数,使得字符串中\(0,1,2\)的个数相同,并且在最少次数的情况下使字典序最小. 题解:贪心,\(0\)一定放在前面,\(1\)和\(2\ ...

  2. Balanced Ternary String CodeForces - 1102D (贪心+思维)

    You are given a string ss consisting of exactly nn characters, and each character is either '0', '1' ...

  3. Balanced Ternary String(贪心+思维)

    题目链接:Balanced Ternary String 题目大意:给一个字符串,这个字符串只由0,1,2构成,然后让替换字符,使得在替换字符次数最少的前提下,使新获得的字符串中0,1,2 这三个字符 ...

  4. 牛客多校第四场 A Ternary String

    题目描述 A ternary string is a sequence of digits, where each digit is either 0, 1, or 2. Chiaki has a t ...

  5. 2018牛客网暑期ACM多校训练营(第四场) A - Ternary String - [欧拉降幂公式][扩展欧拉定理]

    题目链接:https://www.nowcoder.com/acm/contest/142/A 题目描述 A ternary string is a sequence of digits, where ...

  6. CodeForces - 1009B Minimum Ternary String

    You are given a ternary string (it is a string which consists only of characters '0', '1' and '2'). ...

  7. 牛客网暑期ACM多校训练营(第四场):A Ternary String(欧拉降幂)

    链接:牛客网暑期ACM多校训练营(第四场):A Ternary String 题意:给出一段数列 s,只包含 0.1.2 三种数.每秒在每个 2 后面会插入一个 1 ,每个 1 后面会插入一个 0,之 ...

  8. B. Minimum Ternary String (这个B有点狠)

    B. Minimum Ternary String time limit per test 1 second memory limit per test 256 megabytes input sta ...

  9. codeforces ~ 1009 B Minimum Ternary String(超级恶心的思维题

    http://codeforces.com/problemset/problem/1009/B B. Minimum Ternary String time limit per test 1 seco ...

随机推荐

  1. jdk10配置

    解压 vi /etc/profile JAVA_HOME=/home/elasticsearch/jdk- CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOM ...

  2. JVM内存管理机制

    Java与C++之间有一堆由内存动态分配与垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来. —— <深入理解Java虚拟机:JVM高级特性与最佳实践> Java虚拟机在 ...

  3. ZOJ2760_How Many Shortest Path

    给一个图,求从某个点到另一个点的最短路有多少条?所有的路都不共边. 首先从终点开始Spfa标记最短距离,然后建图. 建图的时候,如果满足两点之间的最短路只差为两点之间的边长,那么在网络流的模型中连接一 ...

  4. MT【117】立体几何里的一道分类讨论题

    评:最后用到了中间的截面三角形两边之和大于第三边.能不能构成三棱锥时考虑压扁的"降维"打击是常见的方式.

  5. 【AGC003F】Fraction of Fractal

    Description ​ 原题链接 ​ Solution ​ 神题. ​ 定义一个上边界或下边界的格子为"上下接口",当且仅当上下边界该位置的格子都是黑色的. ​ "左 ...

  6. js中相等、大小 不同类型之间是如何进行对比的。

    上个小问题 [] > [] false [] < [] false [] == [] false // why? 再上个加强版 '6xxx' < '5xx' false '6xxx' ...

  7. 卡特兰数Catalan——定义、公式、模型总结

    推荐:卡特兰数总结 定义: f(i)表示,从(0,0)出发,到(i,i),每次只能向上或者向右走,并且不越过红线的方案数. 这个图片的点上的数字,其实告诉我们f[i],就可以根据这个n方dp得到. 其 ...

  8. python的字符串截取

    str = ‘’ :] #截取第一位到第三位的字符 print str[:] #截取字符串的全部字符 :] #截取第七个字符到结尾 ] #截取从头开始到倒数第三个字符之前 ] #截取第三个字符 ] # ...

  9. 【AC自动机】AC自动机

    Definition & Solution AC自动机是一种多模式串的字符串匹配数据结构,核心在于利用 fail 指针在失配时将节点跳转到当前节点代表字符串的最长后缀子串. 首先对 模式串 建 ...

  10. 【DSU on tree】【CF741D】Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

    Description 给定一棵 \(n\) 个节点的树,每条边上有一个字符,字符集大小 \(22\),求每个节点的子树内最长的简单路径使得路径上的字符经过重排后构成回文串. Limitation \ ...