第33次CCF计算机软件能力认证-第4题十滴水

题干:

十滴水是一个非常经典的小游戏。

CSP202403-4-0.jpeg

C C C 正在玩一个一维版本的十滴水游戏。

我们通过一个例子描述游戏的基本规则。

游戏在一个 1 × c 1×c 1×c 的网格上进行,格子用整数 x ( 1 ≤ x ≤ c ) x(1≤x≤c) x(1xc) 编号,编号从左往右依次递增。

网格内 m m m 个格子里有 1 ∼ 4 1∼4 14 滴水,其余格子里没有水。

在我们的例子中, c = m = 5 c=m=5 c=m=5,按照编号顺序,每个格子中分别有 2 , 4 , 4 , 4 , 2 2,4,4,4,2 2,4,4,4,2 滴水。

玩家可以进行若干次操作,每次操作中,玩家选择一个有水的格子,将格子的水滴数加一。

任何时刻若某个格子的水滴数大于等于 5 5 5,这个格子里的水滴就会向两侧爆开

此时,这个格子的水被清空,同时对于左方、右方两个方向同时进行以下操作:找到当前格子在对应方向上最近的有水的格子,如果存在这样的格子,将这个格子的水滴数加一。

若在某个时刻,有多个格子的水滴数大于等于 5 5 5,则最靠左的先爆开

在我们的例子中,若玩家对第三格进行操作,则其水滴数变为 5 5 5,故第三格水滴爆开,水被清空,其左侧最近的有水格子(第二格)和右侧最近的有水格子(第四格)的水量增加 1 1 1,此时每个格子中分别有 2 , 5 , 0 , 5 , 2 2,5,0,5,2 2,5,0,5,2 滴水。

此时第二格和第四格的水滴数均大于等于 5 5 5,按照规则,第二格的水先爆开,爆开后每个格子中分别有 3 , 0 , 0 , 6 , 2 3,0,0,6,2 3,0,0,6,2 滴水;最后第四格的水滴爆开,每个格子中分别有 4 , 0 , 0 , 0 , 3 4,0,0,0,3 4,0,0,0,3 滴水。

C C C 开始了一局游戏并进行了 n n n 次操作。

C C C 在每次操作后,会等到所有水滴数大于等于 5 5 5 的格子里的水滴都爆开再进行下一次操作。

C C C 想知道他的水平有多高,于是他想知道每一次操作后还有多少格子里有水。

保证这 n n n 次操作都是合法的,即每次操作时操作的格子里都有水。

输入格式

输入的第一行三个整数 c , m , n c,m,n c,m,n 分别表示网格宽度、有水的格子个数以及操作次数。

接下来 m m m 行每行两个整数 x , w x,w x,w,表示第 x x x 格有 w w w 滴水。

接下来 n n n 行每行一个整数 p p p,表示小 C C C 对第 p p p 格做了一次操作。

输出格式

输出 n n n 行,每行一个整数表示这次操作之后网格上有水的格子数量。

数据范围

对于所有测试数据,

  • 1 ≤ c ≤ 1 0 9 1 \le c \le 10^9 1c109 1 ≤ m ≤ min ⁡ ( c , 3 × 1 0 5 ) 1 \le m \le \min(c,3 \times 10^5) 1mmin(c,3×105) 1 ≤ n ≤ 4 m 1 \le n \le 4m 1n4m
  • 1 ≤ x , p ≤ c 1 \le x,p \le c 1x,pc 1 ≤ w ≤ 4 1 \le w \le 4 1w4
  • 输入的所有 x x x 两两不同;
  • 对于每个输入的 p p p,保证在对应操作时 p p p 内有水。

子任务编号

c ≤ c \le c

m ≤ m \le m

特殊性质

1 1 1

30 30 30

30 30 30

2 2 2

3000 3000 3000

3000 3000 3000

3 3 3

3000 3000 3000

3000 3000 3000

4 4 4

1 0 9 10^9 109

3000 3000 3000

5 5 5

3 × 1 0 5 3 \times 10^5 3×105

3 × 1 0 5 3 \times 10^5 3×105

6 6 6

1 0 9 10^9 109

3 × 1 0 5 3 \times 10^5 3×105

7 7 7

1 0 9 10^9 109

3 × 1 0 5 3 \times 10^5 3×105

特殊性质:在游戏的任意时刻(包括水滴爆开的连锁反应过程中),只有至多一个格子的水滴数大于等于 5 5 5

输入样例:
5 5 2
1 2
2 4
3 4
4 4
5 2
3
1
输出样例:
2
1

这道题读完题就明白我们要使用双链表。因为我们可以很容易地看到水槽里面没有水的格子是没有用的,可以直接删去(题干中每次加水只在左右两边的第一个有水的格子),而且我们要能够访问每一个格子它的左右两边的格子。我们明显还要使用到map<>, 因为可以明显的看见对于给定的每一个序号我们能够得到他的水的滴数。所以我们可以想到要使用map<int , Node*> Node是爽两边节点。

下面代码里面有注释,欢迎又不懂的在评论区留言

#include <bits/stdc++.h>using namespace std;const int N = 3e5 + 5;
map<int,int> h; 
// 使用map来进行排序,unordered_map来进行存储
// 题目中样例给的下标是有序的,但是题目中没有说一定是有序的,所以有可能是无序的要先排序。struct Node {int num;Node * left;Node * right;
};int main() {int c, m, n;scanf("%d%d%d", &c, &m, &n);for (int i = 0; i < m; i++) {int a,b;scanf("%d%d", &a, &b);h[a] = b;}unordered_map<int,Node*> s;// 里面放Node指针,就可以指向map里面存储的节点。Node* node = nullptr;for(auto it = h.begin() ; it != h.end() ; it++){//存入unordered_map,记录双链表信息//指针的调用要用 ->Node* new_node = new Node;new_node->num = it->second;new_node->left = node;new_node->right = nullptr;s[it->first] = new_node;if(it != h.begin())node -> right = new_node;node = new_node;}int msize = m;for (int i = 0; i < n; i ++ ){int k;scanf("%d" , &k);node = s[k];node->num ++ ;if(node->num > 4) {while(node){if(node->left){node->left->num ++;node->left->right = node->right;}if(node ->right){node->right->num ++ ;node->right->left = node->left;}msize -- ;if(node->left && node -> left -> num >4){node = node -> left; continue;}if(node->right && node -> right -> num > 4){node = node -> right;continue;}break;}}printf("%d\n" , msize);}return 0;
}

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

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

相关文章

【Flutter、H5、Web?前端个人总结】分享从业经历经验、自我规范准则,纯干货

前言 hi&#xff0c;正式接触web前端已经经过了两年的时间&#xff0c;从大学的java后端转型到web前端&#xff0c;再到后续转战Flutter&#xff0c;逐渐对前端有了一些心得体会&#xff0c;其实在当下前端的呈现形式一直在变化&#xff0c;无论你是用原生、还是web还是混编的…

初始项目托管到gitee教程,开箱即用

0.本地仓库与远程仓库关联&#xff08;需先在gitee创建仓库&#xff09; ①打开powershell生成ssh key ssh-keygen -t ed25519 -C "Gitee SSH Key"-t key 类型-C 注释 生成成功如下&#xff0c;并按下三次回车 ②查看公私钥文件 ls ~/.ssh/输出&#xff1a; id_…

怎么提取伴奏?5个人声分离方法一步搞定!

在进行音乐创作或混音等操作时&#xff0c;提取出音乐中的伴奏是一个常见的需求。伴奏是指音乐中除了主旋律和歌唱部分之外的音轨&#xff0c;通常包括鼓、贝斯、吉他等乐器的演奏&#xff0c;提取出伴奏可以让我们更方便地对音乐进行处理。 本文分享几个可以提取伴奏的方法&a…

el-table表头加红色星标

代码&#xff1a; <el-table-column prop"name" label"姓名" width"auto"><template #header><span style"color: red; margin-right: 4px">*</span><span>姓名</span></template></el…

Mysql—高可用集群MHA

1:什么是MHA&#xff1f; MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切…

22个无版权的4K高清视频素材网站,各种风格视频都有!

平时我也会做一些短视频和宣传片&#xff01; 所以&#xff0c;对找素材这回事不在话下&#xff0c;国内外也有不少高清无水印的视频素材网站&#xff0c;今天就分享一些高清剪辑必备的视频素材渠道&#xff0c;不少也是免费哒&#xff0c;平时需要找素材的同学千万不要错过啦…

Python中的数据可视化艺术:用Matplotlib和Seaborn讲故事

Python中的数据可视化艺术&#xff1a;用Matplotlib和Seaborn讲故事 数据可视化不仅仅是图表的绘制&#xff0c;更是通过视觉形式传达复杂信息的一种艺术。使用Python中的两个强大的库——Matplotlib和Seaborn&#xff0c;可以将数据转化为清晰、优美的图表&#xff0c;帮助我…

【Kubernetes】常见面试题汇总(五十六)

目录 123. pod 创建失败&#xff1f; 124. kube-flannel-ds-amd64-ndsf7 插件 pod 的 status 为 Init:0/1 &#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#x…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-05

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04目录1. LLM-Augmented Symbolic Reinforcement Learning with Landmark-Based Task Decomposition摘要研究背景问题与挑战如何…

『网络游戏』下线数据清理【29】

修改服务端脚本&#xff1a;ServerSession.cs 修改服务端脚本&#xff1a;ServerRoot.cs 修改服务端脚本&#xff1a;CacheSvc.cs 修改服务端脚本&#xff1a;LoginSys.cs 运行服务器 运行客户端 - 连续登录账号 本章结束

VSCode的常用插件(持续更新)

点击左边工具栏的“扩展”&#xff0c;在搜索栏中查找对应插件&#xff0c;点击“安装”&#xff0c;安装完成后右边界面的插件会显示“卸载”按钮。 1、中文&#xff08;简体&#xff09;语言包 2、Auto Rename Tag 修改开始标签&#xff0c;结束标签也会随之自动变化。 3、O…

docker+mysql创建用户名密码_docker里面的mysql 更换密码

进入mysql容器 操作vi etc/mysql/my.cnf 默认是不安装vi编辑器的&#xff0c;下面安装vi 更新安装包 apt-get update 安装vim 执行这条语句 apt-get install vim 到修改docker容器里面的mysql数据库密码了 启动mysql容器 docker exec -it mysql /bin/bash 编辑配置文件 我这里是…

【C++】第五节:内存管理

1、C/C内存分布 看下面一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(s…

与C++内存管理和STL简介的爱恨情仇

本文 1.C/C内存分布2.C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free总结 3.C内存管理方式new/delete操作内置类型new和delete操作自定义类型 4.operator new与operator delete函数&#xff08;重要点进行讲解&#xff09;5.new和delete的实现原理内置类型自定…

制造业DT数字化之生产制造业务建模

一、工厂建模为何物&#xff1f; 对制造业人员&#xff08;人&#xff09;、设备&#xff08;机&#xff09;、材料&#xff08;料&#xff09;、工艺流程&#xff08;法&#xff09;、工厂环境&#xff08;环&#xff09;数据化管理的过程就叫工厂建模。 二、制造建模有哪几大…

【操作系统】引导(Boot)电脑的奇妙开机过程

&#x1f339;&#x1f60a;&#x1f339;博客主页&#xff1a;【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见&#xff1a;【C语言专项】 目录 什么是操作系统的引导&#xff1f; 操作系统的引导&#xff08;开机过程&#xff09; Windows操作系…

QD1-P2 HTML 编辑器:HBuilderX

本节学习&#xff1a; HTML课程内容介绍HBuilderX编辑器的使用 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p2 HTML 内容 基础语法 标签整体架构DOCTYPE 常用标签 标题和水平线段落和换行列表div 和 span格式化标签图片超链接标签表格表单字符实体 编辑器 HBuilder…

设计测试用例的方法

目录 1、等价类 2、边界值 3、场景法 4、正交表法 5、设计正交表 6、判定表法 7、错误猜想法 1、等价类 在测试中选取一些数据作为等价类进行测试&#xff0c;如果测试通过&#xff0c;就代表测试通过&#xff0c;可以用少量代表性的测试数据取得较好的测试结果。 等价类…

智能扭矩系统在轨道交通行业的应用_SunTorque

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。一站式数智工厂解决方案服务商】 在现代轨道交通领域&#xff0c;安全、高效和可靠性是至关重要的考量因素。智能扭矩系统作为一项先进的技术&#xff0c;正逐渐在轨道交通行业中展现出其重要的应用…

【原创】java+springboot+mysql劳动教育网系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…