Educational Codeforces Round 152 (Rated for Div. 2) D题 1849D Array Painting

news2024/10/7 16:20:39

传送门 https://codeforces.com/contest/1849/problem/D

D. Array Painting

题意

在这里插入图片描述

题解

分类讨论
这题的精髓在于欠债
用一个a0表示当前有没有负债
当前欠债最多为1
首先我们讨论, 在不欠债的情况下遇到0是怎么模拟的:

  1. 前面有能够产生贡献的12连通块
    例如: 12110
    很明显答案是1, 点亮左边这个连通块需要1块钱, 而此时2的左边没有负债, 所以没有产生额外的贡献当做1来看
  2. 前面没有能产生贡献的12连通块
    例如: 1100 中下划线的0, 此时前一个0已经将此前的12连通块贡献给吸干了
    这种情况, 负债a0+1

在负债的情况下遇到0:

  1. 前面存在2
    例如: 01210
    2既可以消除此前的负债, 又能担当起点亮这一串连通块的责任, 在例子中2作为12连通块的起点向两边走, 两边的0都可以被消去
  2. 前面不存在2
    例如:01110
    此时需要点亮左边12连通块, 把负债消去, 而现在遇到的这个0, 作为负债继续欠下去

需要注意的是, 如果遍历完了还有负债, 或者最后一个12连通块没有被点亮, 答案都需要+1

代码

void solve()
{
    cin>>n;
    vector<ll>a(n+1);
    ans=0;
    rep(i,1,n) cin>>a[i];
    ll a1,a2,a0;
    a1=a2=a0=0;
    rep(i,1,n)
    {
        if(a[i]==1) a1=1;
        else if(a[i]==2) a2=1;
        else
        {
            if(a0)
            {
                if(a2)
                {
                    //还上了, 但2节点必须要花一块
                    a0=0;
                    a1=0;
                    a2=0;
                    ans++;
                }else 
                {
                    ans++;
                    //补上之前欠的, 继续欠
                }
            }else
            {
                if(a1||a2) 
                {
                    ans++;//染上上一个连续不为0的区块的色
                    a1=a2=0;
                }else a0=1;//欠一个
            }
        }
    }
    if(a0||a[n]) ans++;
    cout<<ans<<endl;
    return;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue element ui el-tree 通过子节点反向递归查找父节点

今天做了一个项目采用的是element tree组件&#xff0c;要求子父节点不强关联&#xff0c;但是当我点击子节点时&#xff0c;会反向的选择所有的父节点&#xff0c;如下图&#xff1a; 当我点击电话时&#xff0c;往上一层的“电话”和“我的”均为父级以上的节点&#xff0c;全…

Practice1|1207. 独一无二的出现次数、1365. 有多少小于当前数字的数字、941. 有效的山脉数组

1207. 独一无二的出现次数 1.题目&#xff1a; 给你一个整数数组 arr&#xff0c;请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的&#xff0c;就返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;arr [1,2,2,1,1,3…

安卓的播放器对比与选型(vlc,EXOplayer,Ijkplayer,GSYVideoPlayer)详细过程

安卓的播放器对比与选型&#xff08;vlc&#xff0c;EXOplayer&#xff0c;Ijkplayer&#xff0c;GSYVideoPlayer&#xff09;&#x1f4fa;详细过程 前言一、vlc二、EXOplayer三、Ijkplayer四、GSYVideoPlayer&#x1f525;&#x1f525;&#x1f525;五、其他的开源播放器jia…

婚庆服务小程序app开发方案详解

开发一款婚庆行业服务小程序有哪些功能呢&#xff1f; 1、选择分类 选择婚庆、婚车、婚宴、司仪、彩妆、婚庆用品、跟拍、摄影等&#xff0c;筛选出对应的商家 2、选择商家 选择分类后&#xff0c;可以选择商家&#xff0c;查看各个商家的详细介绍情况。 3、选择服务套餐 各…

Linux虚拟机(lvm)报Unmount and run xfs_repair

问题 linux系统没有正常关机&#xff0c;今天启动虚拟机无法进入系统&#xff0c;提示metadata corruption deleted at xxxx&#xff1b; Unmount and run xfs_repair 分析 主机异常掉电后里面的虚拟机无法启动&#xff0c;主要是损坏的分区 解决 看出来应该是dm-0分区损坏…

应急响应经典案例-FTP 暴力破解

应急响应经典案例-FTP 暴力破解 应急场景日志分析应急处理措施 应急场景 从昨天开始&#xff0c;网站响应速度变得缓慢&#xff0c;网站服务器登录上去非常卡&#xff0c;重启服务器就能保证一段时间的正常访问&#xff0c;网站响应状态时而飞快时而缓慢&#xff0c;多数时间是…

华为云安装MySQL后,本地工具连接MySQL失败

华为云安装MySQL后&#xff0c;本地连接失败 排查问题步骤&#xff1a; 在此之前需要在MySQL创建用户&#xff0c;并赋予权限。 1、能否ping通。 在本地命令行(Windows&#xff1a;winR)通过ping命令&#xff0c;ping服务器地址&#xff0c;看能否ping通。不能则需要检查本地…

Redis服务优化

目录 一.Rde高可用 二.Rdies持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三.RDB持久化 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.1.4执行流程 3.1.5启动时加载 四.AOF持久化 4.1开启AOF 4.2执行流程 4.2.1命令追加(append) 4.2.2文件写…

ThinkPHP8知识详解:安装ThinkPHP8

我们在讲解前面的文章《搭建PHP8集成环境》和《给PHP8和MySQL8添加到环境变量》以后&#xff0c;现在可以正式的安装ThinkPHP8啦、 1、打开phpenv&#xff0c;启动服务&#xff0c;打开昨天新建的tp8.com的目录&#xff08;D:\phpEnv\www\tp8.com&#xff09;&#xff0c;把里…

LLM系列 | 18 : 如何用LangChain进行网页问答

简介 一夕轻雷落万丝&#xff0c;霁光浮瓦碧参差。 紧接之前LangChain专题文章&#xff1a; 15:如何用LangChain做长文档问答&#xff1f;16:如何基于LangChain打造联网版ChatGPT&#xff1f;17:ChatGPT应用框架LangChain速成大法 今天这篇小作文是LangChain实践专题的第4…

关于element ui 安装失败的问题解决方法并查看是否安装成功

报错信息&#xff1a; 解决办法&#xff1a; 使用命令&#xff1a; npm install --legacy-peer-deps element-ui --save 查看是否安装成功&#xff1a; 方法一&#xff1a;在package.json文件中查看是否有element-ui版本 方法二&#xff1a;查看node_modules目录下是否有elem…

宝塔设置云服务器mysql端口转发,实现本地电脑访问云mysql

环境&#xff1a;centos系统使用宝塔面板 实现功能&#xff1a;宝塔设置云服务器mysql端口转发&#xff0c;实现本地电脑访问mysql 1.安装mysql、PHP-7.4.33、phpMyAdmin 5.0 软件商店》搜索 mysql安装即可 软件商店》搜索 PHP安装7.4.33即可&#xff08;只需要勾选快速安装&…

Vue 3:玩一下web前端技术(一)

前言 本章内容为VUE前端环境搭建与相关前端技术讨论。 下一篇文章地址&#xff1a; &#xff08;暂无&#xff09; 一、环境搭建 1. 安装Node.js Vue是基于Node.js的&#xff0c;因此首先需要安装Node.js。官网地址&#xff1a;Node.js 2. 安装Vue CLI Vue CLI是一个用…

简要介绍 | 自编码器:神经网络中的自我复制艺术

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对自编码器进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 自编码器&#xff1a;神经网络中的自我复制艺术 Autoencoders Explained - MATLAB & Simulink 一、背景介绍 自编码器&#xff0…

Megatron-LM、NVIDIA NeMo、MegaMolBART 、model_optim_rng.pt 文件是什么?

本文涉及以下几个概念&#xff0c;分别是&#xff1a; Megatron和Megatron-LM-v1.1.5-3D_parallelism NVIDIA NeMo Megatron和Megatron-LM-v1.1.5-3D_parallelism是什么&#xff1f; Megatron是由NVIDIA开发的一种用于训练大规模语言模型的开源框架。它旨在提供高效的分布式…

【C++】堆和栈的区别以及delete和delete[]的区别

文章目录 1、堆和栈2、delete和delete[]的区别 1、堆和栈 堆&#xff08;Heap&#xff09;和栈&#xff08;Stack&#xff09;是计算机中用于管理内存的两个重要概念。栈Stack&#xff1a;栈是只允许在一端进行插入和删除操作的线性表&#xff0c;允许插入和删除的一端称为栈顶…

Flink回撤流

1.回撤流定义&#xff08;RetractStream&#xff09; Flink 的回撤流是指在 Flink 的流处理算法中&#xff0c;撤回已经发送到下游节点的数据。这是因为在实际应用场景中&#xff0c;有些错误数据可能会发送到下游节点&#xff0c;因此需要回撤流以保证数据的准确性。 回撤流…

腾讯会议连接蓝牙耳机没有声音 - 解决方案

手机端 手机端连接蓝牙耳机没有声音 打开腾讯会议的附近设备权限。 电脑端 电脑端连接蓝牙耳机没有声音 问题原因 腾讯会议会自动连接使用蓝牙耳机的麦克风&#xff0c;导致耳机为了同时保证输出输入带宽进入了通讯模式&#xff08;hands-free&#xff09;&#xff0c;而腾…

Unity《勇士传说》开发日记:如何制作可互动标识

要实现的需求&#xff1a; 在游戏当中&#xff0c;我们的主角走到宝箱前&#xff0c;可以将宝箱打开&#xff0c;走到洞穴口可以进入下一个场景&#xff0c;此时需要有个互动标识来提示用户。如图所示&#xff1a; 当角色走到宝箱前&#xff0c;弹出互动标识提示用户按下E键可…

机器学习深度学习——感知机

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——softmax回归的简洁实现 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们…