Balanced Ternary String【Codeforces Round #531 (Div. 3)D】【贪心、构造】

2023-10-27

题目链接


一道简单的构造,我们可以分成几个状态,因为所有的状态只有8个,所以,直接写每个状态即可,哎…… 被hack了…… 烦啊…… 谁让我写的好烂…… 好菜啊…… 呜呜呜


#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 3e5 + 7;
int N, num0, num1, num2, splay, head0, head1, head2, sum0, sum1, sum2;
char a[maxN];
int N_0[maxN], N_1[maxN], N_2[maxN];
int main()
{
    scanf("%d", &N);
    head0 = head1 = head2 = 1;
    num0 = num1 = num2 = 0;
    scanf("%s", a + 1);
    for(int i=1; i<=N; i++)
    {
        if(a[i] == '0') N_0[++num0] = i;
        else if(a[i] == '1') N_1[++num1] = i;
        else N_2[++num2] = i;
    }
    sum0 = num0;    sum1 = num1;    sum2 = num2;
    splay = N/3;    //平衡点的中间值
    if(sum0 == splay && sum1 == splay && sum2 == splay) { printf("%s\n", a+1); return 0; }
    if(sum0 > splay && sum1 <= splay && sum2 <= splay)  //001
    {
        for(int i=splay+1; i<=sum0; i++)
        {
            if(sum1 < splay)
            {
                a[N_0[i]] = '1';
                sum1++;
            }
            else
            {
                a[N_0[i]] = '2';
                sum2++;
            }
        }
        printf("%s\n", a+1); return 0;
    }
    if(sum0 <= splay && sum1 > splay && sum2 <= splay)  //010
    {
        int det = sum1 - splay;
        while(det--)
        {
            if(sum0 < splay)
            {
                a[N_1[head1++]] = '0';
                sum0++;
            }
            else
            {
                a[N_1[num1--]] = '2';
                sum2++;
            }
        }
        printf("%s\n", a+1); return 0;
    }
    if(sum0 > splay && sum1 > splay && sum2 <= splay)   //011
    {
        for(int i=splay+1; i<=sum0; i++)
        {
            a[N_0[i]] = '2';
        }
        for(int i=splay+1; i<=sum1; i++)
        {
            a[N_1[i]] = '2';
        }
        printf("%s\n", a+1); return 0;
    }
    if(sum0 <= splay && sum1 <= splay && sum2 > splay)  //100
    {
        int det = sum2 - splay;
        while(det--)
        {
            if(sum0 < splay)
            {
                a[N_2[head2++]] = '0';
                sum0++;
            }
            else
            {
                a[N_2[head2++]] = '1';
                sum1++;
            }
        }
        printf("%s\n", a+1); return 0;
    }
    if(sum0 > splay && sum1 <= splay && sum2 > splay)   //101
    {
        for(int i=splay+1; i<=sum0; i++)
        {
            a[N_0[i]] = '1';
        }
        int det = sum2 - splay;
        while(det--)
        {
            a[N_2[head2++]] = '1';
            sum1++;
        }
        printf("%s\n", a+1); return 0;
    }
    if(sum0 <= splay && sum1 > splay && sum2 > splay)   //110
    {
        int det = sum1 - splay;
        while(det--)
        {
            a[N_1[head1++]] = '0';
            sum0++;
        }
        det = sum2 - splay;
        while(det--)
        {
            a[N_2[head2++]] = '0';
            sum0++;
        }
        printf("%s\n", a+1); return 0;
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Balanced Ternary String【Codeforces Round #531 (Div. 3)D】【贪心、构造】 的相关文章

  • 区间图着色问题

    这是算法导论贪心算法一章的一个习题 题目描述 假定有一组活动 我们需要将它们安排到一些教室 任意活动都可以在任意教室进行 我们希望使用最少的教室完成所有的活动 设计一个高效的贪心算法求每个活动应该在哪个教室进行 这个问题称为区间图着色问题
  • Best Binary String

    Best Binary String 题意 给一个包含0 1 的字符串 可以换成0或1 要求换完之后使得成本最小 二进制字符串的成本定义为按非降序对字符串进行排序所需的 反转字符串的任意连续子字符串 形式的最小操作数 思路 因为每次操作是反
  • POJ--1328:Radar Installation (贪心)

    1 题目源地址 http poj org problem id 1328 2 解题思路 该题题意是为了求出能够覆盖所有岛屿的最小雷达数目 每个小岛对应x轴上的一个区间 在这个区间内的任何一个点放置雷达 则可以覆盖该小岛 区间范围的计算用 x
  • Codeforces Round 744 (Div. 3)

    A Casimir s String Solitaire 一个A需要一个B一个C需要一个B 所以只要A和C的个数之和等于B即可 AC代码 include
  • 消灭兔子【贪心+堆】

    题目链接 51nod 1191 消灭兔子 兔子这么可爱 怎么能消灭呢 我们可以用贪心的办法来解决这个问题 因为每个箭只能使用一次 所以 我们将兔子血量从高往低排列 先做掉高血量兔子 然后再看低血量兔子 保证了伤害高但是价值小的武器假如在之前
  • P1016 旅行家的预算【模拟+贪心】【详解】

    题目链接 思路 这道题是一道很明显的模拟题 但这道题也需要自己的理解 我自己写了些样例 然后找到了其中的模拟 我们假设从一个点出发 对于它的下一个点我们有很多选择 期间定义一个len用以记录满油 单次最远 到达距离 我们造访这条路上的所有点
  • hdoj 1052 Tian Ji -- The Horse Racing 贪心算法

    这道题就是解决选择策略问题 思路一 先将田忌跟齐王的马的速度数组进行一次冒泡排序 1 如果田忌最慢的马比齐王最慢的马快 则比慢马 2 如果田忌最慢的马比齐王最慢的马慢 则用田最慢的马跟齐最快的马比 消耗齐的快马这是贪心的第一步 3 如果田忌
  • [NOI2010]超级钢琴【RMQ+贪心+堆】

    题目链接 超级棒的一道题 解这道题 需要分一下几步来看 取的是连续段 我们可以对每个可能起点去知道它的最大可能解 起点begin 最大可行解一定是begin L 1 begin R 1中的一个 如果每次都是取最大的话 那么下一个同起点的一定
  • 紫书《算法竞赛入门经典》

    紫书 算法竞赛入门经典 题目一览 第3章 数组和字符串 例题 UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 340 Master Mind Hints UVA 158
  • Arson In Berland Forest【Codeforces 1262 E】【二维差分 + 二分答案】

    Codeforces Round 602 Div 2 based on Technocup 2020 Elimination Round 3 E 这道E题当真是HACK了不少人 先讲一下题意吧 有一个N M的矩形 里面放了 X 和 两种类型
  • HDOJ 1052 Tian Ji -- The Horse Racing

    Tian Ji The Horse Racing Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 2
  • NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心)

    疯牛 时间限制 1000 ms 内存限制 65535 KB 难度 4 描述 农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000
  • Bracket Coloring

    Bracket Coloring 题意 给出一个括号序列 定义漂亮序列为匹配括号序列或者反转之后是匹配括号序列的序列 现在要求染色 使得相同颜色的括号组成漂亮序列 问最少需要多少种颜色即每个括号染的颜色 思路 这里可以用栈来匹配括号序列 因
  • 多元Huffman编码问题

    题目链接 题意 最多可以让k堆合并 每一次合并的花费为河合并堆的数量 问最多和最少的花费 题解 最少的花费一定是每次合并的堆数尽可能多 这样我们就会减少前面已经合并的堆的重复计算 所以 每次合并k堆时最少 每次合并2堆时最大 另外 最少的时
  • 2605. 从两个数字数组里生成最小数字

    文章目录 Tag 题目来源 题目解读 解题思路 方法一 枚举比较法 方法二 集合的位运算表示法 写在最后 Tag 贪心 位运算 数组 题目来源 2605 从两个数字数组里生成最小数字 题目解读 给定两个各自只包含数字 1 到 9 的两个数组
  • Stall Reservations POJ - 3190

    这道题 是学长给我们布置的学习用的题目 重在给我们讲解了什么是优先队列以及其对应的贪心问题 好了 先送上 中文翻译过的题意 手动 滑稽 Oh those picky N 1 lt N lt 50 000 cows They are so p
  • Array K-Coloring【Codeforces Round #531 (Div. 3)B】【构造】

    题目链接 题意 给你N长度的数组 以及K种颜色 要求的是我们能否使用全部K种颜色来填充每个数组元素 其中数组中的每个相同值元素的染色是不能相同的 并且 要用完所有K个颜色 能达到以上要求 则是YES并输出染色 否则 只有NO 我WA在了第6
  • +-字符串(简单贪心)

    字符串 时间限制 1000 ms 内存限制 65535 KB 难度 1 描述 Shiva得到了两个只有加号和减号的字符串 字串长度相同 Shiva一次可以把一个加号和它相邻的减号交换 他想知道最少需要多少次操作才能把第一个字符串变换成第二个
  • AcWing 1247. 后缀表达式

    老师的讲课网址 https www acwing com video 736 第二个图就已经告诉我们只要有一个减号 我们就可以组成至少含一个减号的所有组合 比如说一个减号三个加号我们可以组合成 1 2 3 4 所以代码如下 include
  • 深入C++的拷贝构造和赋值函数 (深拷贝,浅拷贝)

    参考了 点击打开链接以及 高质量程序设计指南C C语言 说明 拷贝构造函数是一种特殊的构造函数 相同类型的类对象是通过拷贝构造函数来完成整个复制过程的 函数的名称必须和类名称一致 它的参数是唯一的 该参数是const类型的引用变量 例如 类

随机推荐

  • 2023年第七届航空航天、机械与机电工程国际会议(CAMME 2023)会议日期:2023-2-18 至 2023-2-20

    会议简介 2023年第七届航空航天 机械与机电工程国际会议 CAMME 2023 重要信息 会议网址 www camme org 会议时间 2023年2月18 20日 召开地点 中国广州 截稿时间 2023年12月30日 录用通知 投稿后2
  • LCD显示的一些基本概念

    参考文章 LCD的一些基本概念 添加链接描述 知识点 水平消隐 Hblank 电子枪从左到右画出像素 他每次只能画一条扫描线 画之前要先回到左边并做好画下一条扫面线的准备 这之间有一段时间叫做水平消隐 垂直消隐 VBlank 在画完全部的的
  • 【Java面试题汇总】JVM篇(2023版)

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 牛客面试题 目录 1 说说你了解的JVM内存模型 2 简单说下你对JVM的了解 3
  • 配置Spring数据源c3p0与dbcp

    不管通过何种持久化技术 都必须通过数据连接访问数据库 在Spring中 数据连接是通过数据源获得的 在以往的应用中 数据源一般是Web应用服务器提供的 在Spring中 你不但可以通过JNDI获取应用服务器的数据源 也可以直接在Spring
  • redis HyperLogLog

    1 概述 Redis 在 2 8 9 版本添加了 HyperLogLog 结构 Redis HyperLogLog 是用来做基数统计的算法 HyperLogLog 的优点是 在输入元素的数量或者体积非常非常大时 计算基数所需的空间总是固定
  • SpringBoot默认的五个静态资源位置&&自定义静态资源位置&&WebMvcCofigurer源码解析

    我们在SSM中的SpringMVC中配置静态资源过滤
  • Contest2609 - 高级语言程序实践--第8次作业--计信A2107-2113

    问题 A 统计字母数量 题目描述 有如下一段英文短文 请编写程序统计这段短文前 n 小段中每一个英文字母出现的次数 结果按次数降序排列 次数相同时 按字母表顺序输出 若 n 值大于短文行数 输出整篇文章中每一个英文字母出现的次数 大写字母按
  • Winsock属性、方法介绍

    Winsock是Mcrosoft windows提供的网络编程接口 它供了基于TCP IP协议接口实现方法 通过网络进行的数据通信 需要用地址来表示网络中的主机 TCP IP协议使用IP地址来作为主机的标识 实现的连接方式是通过IP地址来识
  • 亚信科技Java实习生(大三)面试

    亚信科技Java实习生面试 我面的挺晚的了 6 11才面 有的同学都实习几周甚至一个月了 但是同一个公司 我同学面试的时候 竟然全问的非技术问题 理想 大学经历 迷惑 可能我运气有一点好吧 看了一些面经 都是偏重基础 所以也是主要复习的基础
  • 2023华为od机试 Java 【路径步数】

    题目 小明喜欢户外运动 这个周末他打算去附近的山区探险 他面前有一张特殊的地图来帮助他找到这片区域的最高点 这张地图是一个由数字构成的网格 网格中的每一个单元格包含一个数字 代表那个点的高度 其中 数字 0 代表平地 而数字 1 到 9 则
  • 云服务器磁盘扩容后不显示,腾讯云服务器磁盘扩容问题小记

    操作系统 CentOS 7 2 文件类型 ext3 磁盘扩容前 一定要先做磁盘快照备份 1 卸载挂载点报错 umount dev vdb1 umount u01 target is busy In some cases useful inf
  • dclode mui.ajax无法发送跨域请求,type为abort

    前台 mui的ajax代码 后台java spring boot代码 后来得知原因是不能使用localhost和127 0 0 7需要使用本机的IP地址 且手机和电脑要连同一无线 修改ip地址后 程序正常 且需要注意 json要为大写 Js
  • 一道有关路由器的实验题 寻找前辈指导

    如图所示 使用Dynamips搭建网络环境由路由器R1 R5构成 路由器PC模拟PC机 R1 R2上配置Loopback地址 好像我的这个拓扑图无法显示 不过我把拓扑图传到附件那里了 如果有乐于助人的好前辈的话 那还的麻烦您把它下载来看看
  • ArrayList、ArrayDeque与LinkedList区别

    ArrayList ArrayDeque与LinkedList区别 ArrayList ArrayDeque内部以数组的形式保存集合中的元素 因此随机访问元素时有较好的性能 而LinkedList内部以链表的形式来保存集合中的元素 因此随机
  • 平均值不等式的证明

    平均值不等式的证明 需要证明的结论 对任意 n n n个正数 a 1
  • 【华为OD机试真题 JS】停车场车辆统计

    标题 停车场cars 数组表示 其中值1为有车 0为无车 车有三种大小 小车占位1 卡车占位2 货车占位3 求最少可以停多少车 输入描述 输入 整型字符串数组cars 其中1表示有车 0表示没车 数组长度小于1000 输出 整型数字字符串
  • 泛微为什么大量招人_OA市场增长乏力 泛微未来靠什么取胜?

    上周 泛微网络发布了其2019年中期财报 营收和利润均获得增长 财报显示 2019 年上半年 公司共实现营业收入 50 494 62 万元 同比增长 25 96 实现归母净利润 4 919 37 万元 比上年同期增加 35 70 尽管收入增
  • Go(五)数组

    目录 Array 数组 数组定义 数组的初始化 方法一 方法二 方法三 数组的遍历 多维数组 二维数组的定义 二维数组的遍历 数组是值类型 Array 数组 数组是同一种数据类型元素的集合 在Go语言中 数组从声明时就确定 使用时可以修改数
  • 常见凭证获取方法

    常见凭证获取方法 Windows下凭证获取 系统密文数据 原理介绍 SAM系统安全账号管理 是微软设计的一个安全机制 为了保护账号以及密码的安全性 路径是C windows system32 config SA 该文件是无法修改和删除的 它
  • Balanced Ternary String【Codeforces Round #531 (Div. 3)D】【贪心、构造】

    题目链接 一道简单的构造 我们可以分成几个状态 因为所有的状态只有8个 所以 直接写每个状态即可 哎 被hack了 烦啊 谁让我写的好烂 好菜啊 呜呜呜 include