D - Balanced Ternary String (贪心)
题目链接: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 (贪心)的更多相关文章
- Codeforces Round #531 (Div. 3) D. Balanced Ternary String (贪心)
题意:给你一个长度为\(3*n\)的字符串,要求修改最少的次数,使得字符串中\(0,1,2\)的个数相同,并且在最少次数的情况下使字典序最小. 题解:贪心,\(0\)一定放在前面,\(1\)和\(2\ ...
- Balanced Ternary String CodeForces - 1102D (贪心+思维)
You are given a string ss consisting of exactly nn characters, and each character is either '0', '1' ...
- Balanced Ternary String(贪心+思维)
题目链接:Balanced Ternary String 题目大意:给一个字符串,这个字符串只由0,1,2构成,然后让替换字符,使得在替换字符次数最少的前提下,使新获得的字符串中0,1,2 这三个字符 ...
- 牛客多校第四场 A Ternary String
题目描述 A ternary string is a sequence of digits, where each digit is either 0, 1, or 2. Chiaki has a t ...
- 2018牛客网暑期ACM多校训练营(第四场) A - Ternary String - [欧拉降幂公式][扩展欧拉定理]
题目链接:https://www.nowcoder.com/acm/contest/142/A 题目描述 A ternary string is a sequence of digits, where ...
- CodeForces - 1009B Minimum Ternary String
You are given a ternary string (it is a string which consists only of characters '0', '1' and '2'). ...
- 牛客网暑期ACM多校训练营(第四场):A Ternary String(欧拉降幂)
链接:牛客网暑期ACM多校训练营(第四场):A Ternary String 题意:给出一段数列 s,只包含 0.1.2 三种数.每秒在每个 2 后面会插入一个 1 ,每个 1 后面会插入一个 0,之 ...
- B. Minimum Ternary String (这个B有点狠)
B. Minimum Ternary String time limit per test 1 second memory limit per test 256 megabytes input sta ...
- codeforces ~ 1009 B Minimum Ternary String(超级恶心的思维题
http://codeforces.com/problemset/problem/1009/B B. Minimum Ternary String time limit per test 1 seco ...
随机推荐
- properties文件读取与写入
将peoperties文件的读取和写入封装成了一个工具类: import java.io.BufferedInputStream; import java.io.FileInputStream; im ...
- 题解 P2026 【求一次函数解析式】
高中方式轻松解决这个模拟题. 首先我们了解斜率的简单求法: \[k= {y2-y1 \over x2-x1}{=}{\Delta y \over \Delta x}\] 然后我们了解到让我们求解一次函 ...
- Distinct Substrings SPOJ - DISUBSTR(后缀数组水题)
求不重复的子串个数 用所有的减去height就好了 推出来的... #include <iostream> #include <cstdio> #include <sst ...
- 【刷题】BZOJ 2588 Spoj 10628. Count on a tree
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
- 【HDU4336】Card Collector(Min-Max容斥)
[HDU4336]Card Collector(Min-Max容斥) 题面 Vjudge 题解 原来似乎写过一种状压的做法,然后空间复杂度很不优秀. 今天来补一种神奇的方法. 给定集合\(S\),设\ ...
- SQL语句平时不注意的那些小知识点总结
一.Mybatis 动态sql 之<where>标签和<trim>标签 首先两个标签都可以实现这样的功能:做一个查询接口,有两个参数,当输入参数无论是一个还是两个或者不输入的时 ...
- Java EE之表达式语言EL(下)
1.在EL表达式中使用作用域变量 表达式语言对作用域变量的支持,以及它解析变量的方式都使它变得非常有用. 1.1 EL表达式的隐式变量 EL表达式的作用域中定义了11个隐式变量. 当EL表达式引用了一 ...
- (转)java getResourceAsStream的使用方法
背景:对于java项目中配置文件加载时候的绝对路径和相对路径做一个清晰的认识! 1 分析路径 在Java项目中会经常用到getResourceAsStream这个函数获取一些配置文件,但是怎样正确使用 ...
- bug2 The method of type must override a superclass method解决方式(去掉@override可以)
@Override 时出错误: 解决办法是: 一. 因为你的Co ...
- 关于ASP.NET MVC的Html.BeginForm()方法
http://zhidao.baidu.com/link?url=9j53URZJv2B9W-TPtQAaKCRbqIcYy2r3WNO0NDzciTON0EYj5Hhd3rl3UlIllK1CqOC ...