首页 > 其他分享 >Balanced Ternary String

Balanced Ternary String

时间:2023-06-13 11:45:02浏览次数:40  
标签:&& ix num0 String num2 int Ternary Balanced num0x

给出一个长为n的只由'1','2','0'组成的字符串,要求改动最少的位置,使'1','2','0'的个数相同(保证n能被3整除),并使改动后的字符串字典序最小。

n不大于3∗105

贪心思路,从左向右大的变小的,从右向左小的变大的:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
string s,ss;
int res,n,x,num1,num0,num2;
int main()
{
    cin>>n>>s;
    ss=s;
    x=n/3;
    for(int i=0;i<n;i++){
        if(s[i]=='0') num0++;
        else if(s[i]=='1') num1++;
        else if(s[i]=='2') num2++;
    }
    if(num2>x){
        if(num0<x&&num2>x)
            for(int i=0;i<n;i++){
                if(num2>x&&num0<x&&s[i]=='2') s[i]='0',num2--,num0++;
                if(num0==x||num2==x) break;
            }        
        if(num1<x&&num2>x)
            for(int i=0;i<n;i++){
                if(num2>x&&num1<x&&s[i]=='2') s[i]='1',num2--,num1++;
                if(num1==x||num2==x) break;
            }        
    }    
    if(num1>x){
        if(num0<x&&num1>x)
            for(int i=0;i<n;i++){
                if(num1>x&&num0<x&&s[i]=='1') s[i]='0',num1--,num0++;
                if(num0==x||num1==x) break;
            }
        if(num2<x&&num1>x)
            for(int i=n-1;i>=0;i--){
                if(num1>x&&num2<x&&s[i]=='1') s[i]='2',num1--,num2++;
                if(num2==x||num1==x) break;
            }
    }    
    if(num0>x){
        for(int i=n-1;i>=0;i--){
            if(num0>x&&s[i]=='0'){
                if(num2<x) s[i]='2',num2++,num0--;
                else if(num1<x) s[i]='1',num1++,num0--;
            }
        }
    }
    cout<<s;
    return 0;
}

 

标签:&&,ix,num0,String,num2,int,Ternary,Balanced,num0x
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17477115.html

相关文章

  • 手撕switch处理String底层源码
    publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{ privatefinalchar[]value;privateinthash;//hash值publicString(Stringoriginal){this.value=original.value;//['a�......
  • Educational Codeforces Round 9-C. The Smallest String Concatenation(字符串排序)
    原题链接C.TheSmallestStringConcatenationtimelimitpertestmemorylimitpertestinputoutputn strings a1, a2, ..., an.You'dliketoconcatenatethemtogetherinsomeordersuchthattheresultings......
  • POJ 3264 Balanced Lineup
    思路:线段树求最大值减最小值,每个结点分别维护最大值和最小值即可。#include<cstdio>#include<queue>#include<cstring>#include<iostream>#include<cstdlib>#include<algorithm>#include<vector>#include<map>#include<string>#in......
  • string的使用
    1.什么是stringstring是一个字符数组,用法比较灵活,类似于char类型的vector。但它比起字符数组更加便于使用,不需要各种繁琐的代码。2.用法(1)声明stringstr;//声明一个字符串stringstrs[100];//声明一个字符串数组(2)与子串有关(重要知识点)str.insert(loc,s);//在......
  • 【C++】STL常用容器总结之十二:string类
    13、string类声明string类本不是STL的容器,但是它与STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍。之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完......
  • std::string源码探秘和性能分析
    std::string源码探秘和性能分析2016年05月05日22:15:15std::string源码探秘和性能分析本文主要讲c++标准库的string的内部实现,以及对象拷贝的性能分析。文中采用的源码版本为gcc-4.9,测试环境为centos7,x86_64,涉及到指针等数据类型的大小也假定是在64环境位下。stl源码可以在......
  • c++中string类的源代码
    一:回顾(1)c++中的string类是在面试中和笔试中经常考的题目;工程代码免费下载 string类的自行实现(2)c++中的string类和fstream类合起来是处理外部数据的利器;(3)string类经常用到findfind_first_offind_first_not_offind_last_offind_last_not_ofsubstrreplace等,以及联合使用来达......
  • js:typeof和Object.prototype.toString检测数据类型
    (目录)typeof检测数据类型console.log(typeof100);//"number"console.log(typeof"abc");//"string"console.log(typeoffalse);//"boolean"console.log(typeofundefined);//"undefined"console.log(typeoffunction......
  • Redis数据类型之String
    1.string类型数据的基本操作添加/修改数据:setkeyvalue获取数据:getkey删除数据:delkey添加/修改多个数据:msetkeyvaluekey1value1获取多个数据:mgetkeykey1追加信息到原始数据后边(不存在时则添加):appendkeyvalue2.string类型增减操作设置数据增加指定范围的值:incrke......
  • STL-string(ACM)
    1.相当于加了一些操作的vector<char>基本操作字符串转换(C++11)//将字符串转换为整型stoi()//将字符串转换为longlongstoll()//将字符串转换为float型stof()//将字符串转换为double型stod()后面加入s+=t;//时间复杂度O(t)s.push_back();字符串替换......