D - Balanced Ternary String (贪心)

该博客讨论了如何使用贪心策略解决一个编程竞赛问题:通过最少次数替换0,1,2组成的字符串,使得三个字符数量相等且字典序最小。文章提供了具体的思路和AC代码。" 133333264,20038959,使用OpenGL模拟太阳系运动,"['图形学', '计算机图形学', 'OpenGL编程', '物理学', '软件开发']
摘要由CSDN通过智能技术生成

题目链接: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+100;
int num[4];
char str[maxn];
int main()
{
    int len;
    scanf("%d",&len);
    scanf(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值