CF1102D-Balanced Ternary String-(贪心)
http://codeforces.com/problemset/problem/1102/D
题意:
有n个字符,只能为012,现要通过变换让012的数量相等,并且使字典序最小。
解题:
由样例可以看出不能打乱原来的位置,按001122这样输出,只能一个一个替换,贪心。
1)只有0少了:优先把多余的2换成0,再把多余的1换成0。
2)只有1少了:优先把多余的2换成1,等0够了再把多余的0换成1。
3)只有2少了:等0和1够了,优先把多余的1换成2,再把多余的0换成2。
4)0和1都少了:2优先换成0,再换成1,再输出自己的。
5)0和2都少了:1优先换成0,1够了再换成2。
6)1和2都少了:0够了再把多余的0换成1,再换成2。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<set>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; int n;
string s; int main()
{
while(cin>>n)
{
cin>>s;
int x=n/;
int zero=,one=,two=;
for(int i=;i<n;i++)
{
if( s[i]=='' )
zero++;
else if(s[i]=='')
one++;
else
two++;
}
zero-=x;
one-=x;
two-=x;
if( zero< && one>= && two>= )
{
for(int i=;i<n;i++)
{
if( s[i]=='' && zero< && two> )
s[i]='',zero++,two--;
else if( s[i]=='' && zero< && one> )
s[i]='',zero++,one--;
}
}
else if( one< && zero>= && two>= )
{
int now0=;
for(int i=;i<n;i++)
{
if(s[i]=='' && now0<x)
now0++;
else if( s[i]=='' && one< && two> )
s[i]='',one++,two--;
else if( s[i]=='' && one< && zero> && now0==x )
s[i]='',one++,zero--;
}
}
else if( two< && zero>= && one>= )
{
int now0=,now1=;
for(int i=;i<n;i++)
{
if(s[i]=='' && now0<x)
now0++;
else if( s[i]=='' && now1<x )
now1++;
else if( s[i]=='' && one> && now1==x && two< )
s[i]='',one--,two++;
else if( s[i]=='' && zero> && now0==x && two< )
s[i]='',zero--,two++; }
}
else if( zero< && one< && two> )
{
for(int i=;i<n;i++)
if( s[i]=='' && two> && zero< )
s[i]='',two--,zero++;
else if( s[i]=='' && two> && one< )
s[i]='',two--,one++;
}
else if( zero< && two< && one> )
{
int now1=;
for(int i=;i<n;i++)
{
if( s[i]=='' && zero== && now1<x )
now1++;
else if( s[i]=='' && zero< && one> )
s[i]='',zero++,one--;
else if( s[i]=='' && now1==x && two< && one> )
s[i]='',two++,one--; }
}
else if( one< && two< && zero> )
{
int now0=;
for(int i=;i<n;i++)
{
if( s[i]=='' && now0<x )
now0++;
else if( s[i]=='' && one< && now0==x && zero> )
s[i]='',one++,zero--;
else if( s[i]=='' && two< && now0==x && zero> )
s[i]='',two++,zero--;
}
}
cout<<s<<endl;
}
return ;
}
CF1102D
CF1102D-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 这三个字符 ...
- D - Balanced Ternary String (贪心)
题目链接:http://codeforces.com/contest/1102/problem/D 题目大意:给你一个字符串,这个字符串是由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 ...
随机推荐
- Sitecore安全:访问权限
由于Sitecore使用Core数据库中的项来定义其用户界面,因此您可以对该数据库中的项应用访问权限,以控制对CMS功能的访问.最常见的是,将用户置于预定义的Sitecore客户端角色中 Siteco ...
- 【转载】Linux(CentOS)下安装Redis
转载地址:https://blog.csdn.net/diweikang/article/details/78784631 1.下载Redis下载最新Linux版本的Redis,我用的是redis-4 ...
- 谷歌浏览器安装Elasticsearch-head 插件
下载该插件,地址:https://github.com/liufengji/es-head/blob/master/elasticsearch-head.crx 下载后的文件名是:elasticsea ...
- php 获取当前IP地址
function getIP() { return isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FO ...
- winform+CefSharp 实现和js交互
1:窗体加载的时候添加 webBrowser.RegisterJsObject("getuserName", new _Event()); 2:注册C#方法为js方法 /// // ...
- 用lambda表达式写左联查询的示例
需要完成的查询逻辑:A表内联B表,B表左联C表,A表左联D表,并且 C表的TotalCount>23,D表的ClassHour>8,最后查出A表的Id,代码如下: IQueryable&l ...
- CKEditor 4 上传视频
参考资料:CKEditor添加Video视频插件 HTML5 video 记得配置插件以及上传地址,不知道哪一个是上传视频的地址参数,我也没有试,因为我有上传图片的功能,所以这三个参数我都设置了. / ...
- azure 上传blob到ams(CreateFromBlob)
遇到的错误:The destination storage credentials must contain the account key credentials,参数名: destinationS ...
- Python 栈、队列的实现
在python中,列表既可以作为栈使用,又可以作为队列使用. 把列表作为栈使用 栈:后进先出 stack=[1,2,3] stack.append(4) #入栈,以列表尾部为栈顶 print(stac ...
- prometheus学习系列十一: Prometheus和AlertManager的高可用
前面的系列中, prometheus和alertmanager都是单机部署的,会有单机宕机导致系统不可用情况发生.本文主要介绍下prometheus和alertmanager的高可用方案. 服务的高可 ...