题解 CodeForces 430B Balls Game 栈 C/C++

题目传送门:

Problem - B - Codeforcesicon-default.png?t=O83Ahttps://mirror.codeforces.com/contest/430/problem/B翻译:

Iahub正在为国际信息学奥林匹克竞赛(IOI)做准备。有什么比玩一个类似祖玛的游戏更好的训练方法呢?

一排中有n个球。每个球都染着k种颜色中的一种。最初,这一排球中不会有三个或三个以上连续相同颜色的球。Iahub有一个颜色为x的球。他可以将他的球插入排列中的任意位置(可能是在另外两个球之间)。如果任何时刻排列中有三个或三个以上连续相同颜色的球,它们将立即被销毁。这个规则会被多次应用,直到没有更多连续三个或三个以上相同颜色的球。

例如,如果Iahub有一排球[黑, 黑, 白, 白, 黑, 黑]和一个白球,他可以将球插入两个白球之间。这样三个白球被销毁,然后四个黑球变得连续,所以所有四个球都被销毁。最终排列中将不再有任何球,因此Iahub可以销毁所有6个球。

Iahub希望尽可能多地销毁球。给定球排列的描述以及Iahub的球的颜色,通过告诉他他可以销毁的最大数量的球来帮助Iahub为IOI做准备。

输入

输入的第一行包含三个整数:n(1 ≤ n ≤ 100)、k(1 ≤ k ≤ 100)和x(1 ≤ x ≤ k)。接下来一行包含n个空格分隔的整数c1, c2, ..., cn(1 ≤ ci ≤ k)。数字ci表示排列中第i个球的颜色为ci

保证初始球排列永远不会包含三个或三个以上连续相同颜色的球。

输出

输出一个整数 — Iahub可以销毁的最大数量的球。

示例

InputOutput
6 2 2
1 1 2 2 1 1
6
InputOutput
1 1 1
1

思路:

祖玛游戏/一维消消乐,找到一个消除点,并向两端扩展

可以在脑中想象一下这个过程,这和括号序列匹配很像 

事件之间都是完全包含关系,不难想到,可以用栈解决

此外,将相连的相同颜色的球视为一个整体 (一个括号)

会使我们处理起来方便得多,因此我们先对输入的内容做一个预处理,将颜色相同的球合并

结构体 A 的一个对象就是相连的相同颜色的球的一个整体

color 表示整体的颜色,num 表示整体包含的球的数量

将预处理结果存入 arr,然后遍历 arr,寻找可以消除的位置,之后进行 "括号序列匹配"

细节见代码

代码:

#include <algorithm>
#include <iostream>
using namespace std;
struct A { int color, num; } arr[105], stk[105];//stk 是一个临时的栈,每次循环开始都会清空
int n, k, x, pre, input, top = -1, ans;//pre 在预处理时记录上一次的输入,pre 与输入 input 相同时,合并相同颜色,否则新建一个整体。pre 初始值要和所有颜色都不相同
int main()
{cin >> n >> k >> x;for (int i = 0; i < n; i++)//预处理{cin >> input;if (input != pre) arr[++top] = { input, 1 };//不同颜色新建一个整体else arr[top].num++;//合并相同颜色pre = input;}for (int i = 0; i <= top; i++)//遍历,寻找能够消除的位置。枚举所有情况{if (arr[i].color == x && arr[i].num >= 2)//整体颜色与 x 相同,且整体元素数量 >= 2 时,可以消除{arr[i].num++;//将 x 合并到整体里,然后创建一个临时的栈 stk,从头开始做 "括号序列匹配"//只不过匹配成功进行消除的条件是:整体元素数量 >= 3,或,即将入栈的整体与栈顶整体颜色相同,且总元素数量 >= 3int t = -1, cnt = 0;//t 指向栈顶元素,每轮枚举都从栈为空开始。cnt 统计该轮消除的球的数量for (int j = 0; j <= top; j++)//"括号序列匹配"{if (arr[j].num >= 3) cnt += arr[j].num;else if (t == -1 || arr[j].color != stk[t].color) stk[++t] = arr[j];else{stk[t].num += arr[j].num;if (stk[t].num >= 3) cnt += stk[t--].num;}}arr[i].num--;//恢复现场,参考 DFS 中回溯后要进行的操作,这样不影响下一轮枚举ans = max(ans, cnt - 1);//答案不包含 x 本身,所以 ans 更新时和 cnt-1 比较}}cout << ans;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过proto文件构建 完整的 gRPC 服务端和客户端案例

基础教程-简单案例&#xff08;快入入门java-grpc框架&#xff09; 参考官方入门案例教程&#xff1a;里面我看proto编译&#xff0c;其实直接用maven就能直接将.proto文件编译成java代码。快速入门 | Java | gRPC 框架https://grpc.org.cn/docs/languages/java/quickstart/ …

Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)

MySQL 提供了多种备份方式&#xff0c;每种方式适用于不同的场景和需求。根据备份的粒度、速度、恢复时间和对数据库的影响&#xff0c;可以选择合适的备份策略。主要备份方式有三大类&#xff1a;逻辑备份&#xff08;mysqldump&#xff09;&#xff0c;物理备份和二进制文件备…

如何修复Android上未安装的应用程序

在Android设备上安装应用程序通常是一个简单的过程。然而&#xff0c;“ Android上未安装应用程序”是一种常见的智能手机错误消息&#xff0c;由于一个或多个原因而经常遇到。发现由于即将出现故障而无法充分利用手机&#xff0c;这当然会非常令人沮丧&#xff0c;但幸运的是&…

干净卸载Windows的Node.js环境的方法

本文介绍在Windows电脑中&#xff0c;彻底删除Node.js环境的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/144810076&#xff09;中&#xff0c;我们介绍过在Windows电脑中&#xff0…

初始Java4

目录 一.继承 1.定义&#xff1a; 2.继承的语法&#xff1a; 3.子类访问父类 4.子类构造方法 5.super与this 6.继承方法 7.final关键字 &#xff08;1&#xff09;.变量不变 &#xff08;2&#xff09;.方法不变 &#xff08;3&#xff09;.类不可继承 8.继承与组合…

算法竞赛(蓝桥杯)贪心算法1——数塔问题

题目描述 有如下所示的数塔&#xff0c;要求从底层走到顶层&#xff0c;若每一步只能走到相邻的结点&#xff0c;则经过的结点的数字之和最大是多少&#xff1f; 输入 输入数据首先包括一个整数整数 N (1≤N≤100)&#xff0c;表示数塔的高度&#xff0c;接下来用 N 行数字表示…

MATLAB学习笔记-table

1.在table中叠加table table 的每一列具有固定的数据类型。如果要让表的所有单元格都可以任意填充&#xff0c;就得让每一列都是 cell 类型&#xff0c;这样表中每个单元格都是“一个元胞”。创建时可以先构造一个 空 cell 数组&#xff08;大小为行数列数&#xff09;&#x…

RabbitMQ(三)

RabbitMQ中的各模式及其用法 工作队列模式一、生产者代码1、封装工具类2、编写代码3、发送消息效果 二、消费者代码1、编写代码2、运行效果 发布订阅模式一、生产者代码二、消费者代码1、消费者1号2、消费者2号 三、运行效果四、小结 路由模式一、生产者代码二、消费者代码1、消…

django在线考试系统

Django在线考试系统是一种基于Django框架开发的在线考试平台&#xff0c;它提供了完整的在线考试解决方案。 一、系统概述 Django在线考试系统旨在为用户提供便捷、高效的在线考试环境&#xff0c;满足教育机构、企业、个人等不同场景下的考试需求。通过该系统&#xff0c;用…

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中&#xff0c;下载、部署NVM&#xff08;node.js version management&#xff09;环境&#xff0c;并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法&#xff08;https://blog.csdn.net/zhebushibiaoshi…

【Rust练习】28.use and pub

练习题来自&#xff1a;https://practice-zh.course.rs/crate-module/use-pub.html 1 使用 use 可以将两个同名类型引入到当前作用域中&#xff0c;但是别忘了 as 关键字. use std::fmt::Result; use std::io::Result;fn main() {}利用as可以将重名的内容取别名&#xff1a;…

React第二十二章(useDebugValue)

useDebugValue useDebugValue 是一个专为开发者调试自定义 Hook 而设计的 React Hook。它允许你在 React 开发者工具中为自定义 Hook 添加自定义的调试值。 用法 const debugValue useDebugValue(value)参数说明 入参 value: 要在 React DevTools 中显示的值formatter?:…

一体机cell服务器更换内存步骤

一体机cell服务器更换内存步骤&#xff1a; #1、确认grdidisk状态 cellcli -e list griddisk attribute name,asmmodestatus,asmdeactivationoutcome #2、offline griddisk cellcli -e alter griddisk all inactive #3、确认全部offline后进行关机操作 shutdown -h now #4、开…

VSCode连接Github的重重困难及解决方案!

一、背景&#xff1a; 我首先在github创建了一个新的项目&#xff0c;并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时&#xff0c;错误出现了 二、报错及解决方案&#xff1a; 1.解决方案&#xff1a; 需要在git上配置用…

JAVA安全—JWT攻防Swagger自动化Druid泄露

前言 依旧是Java安全的内容&#xff0c;今天主要是讲JWT这个东西&#xff0c;JWT之前讲过了&#xff0c;是Java中特有的身份校验机制&#xff0c;原理我就不再多说了&#xff0c;主要是看看它的安全问题&#xff0c;至于Swagger和Druid顺便讲一下。 Druid泄露 Druid是阿里巴…

Pytorch基础教程:从零实现手写数字分类

文章目录 1.Pytorch简介2.理解tensor2.1 一维矩阵2.2 二维矩阵2.3 三维矩阵 3.创建tensor3.1 你可以直接从一个Python列表或NumPy数组创建一个tensor&#xff1a;3.2 创建特定形状的tensor3.3 创建三维tensor3.4 使用随机数填充tensor3.5 指定tensor的数据类型 4.tensor基本运算…

CDP中的Hive3之Hive Metastore(HMS)

CDP中的Hive3之Hive Metastore&#xff08;HMS&#xff09; 1、CDP中的HMS2、HMS表的存储&#xff08;转换&#xff09;3、HWC授权 1、CDP中的HMS CDP中的Hive Metastore&#xff08;HMS&#xff09;是一种服务&#xff0c;用于在后端RDBMS&#xff08;例如MySQL或PostgreSQL&a…

C#,图论与图算法,任意一对节点之间最短距离的弗洛伊德·沃肖尔(Floyd Warshall)算法与源程序

一、弗洛伊德沃肖尔算法 Floyd-Warshall算法是图的最短路径算法。与Bellman-Ford算法或Dijkstra算法一样&#xff0c;它计算图中的最短路径。然而&#xff0c;Bellman Ford和Dijkstra都是单源最短路径算法。这意味着他们只计算来自单个源的最短路径。另一方面&#xff0c;Floy…

Android中下载 HAXM 报错 HAXM installation failed,如何解决?

AMD芯片的电脑在 Android Studio 中安装 Virtual Device 时&#xff0c;经常会出现一个 问题 Intel HAXM installation failed. To install Intel HAXM follow the instructions found at: https://github.com/intel/haxm/wiki/Installation-Instructions-on-Windows 一直提示H…

少一点If/Else - 状态模式(State Pattern)

状态模式&#xff08;State Pattern&#xff09; 状态模式&#xff08;State Pattern&#xff09;状态模式&#xff08;State Pattern&#xff09;概述状态模式&#xff08;State Pattern&#xff09;结构图状态模式&#xff08;State Pattern&#xff09;涉及的角色 talk is c…