【CCF-CSP】202403-4 十滴水

题目描述

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

img

小 C 正在玩一个一维版本的十滴水游戏。我们通过一个例子描述游戏的基本规则。

游戏在一个 1×c 的网格上进行,格子用整数x(1≤x≤c) 编号,编号从左往右依次递增。网格内 m 个格子里有 1∼41∼4 滴水,其余格子里没有水。在我们的例子中,c=m=5,按照编号顺序,每个格子中分别有 2,4,4,4,22,4,4,4,2 滴水。

玩家可以进行若干次操作,每次操作中,玩家选择一个有水的格子,将格子的水滴数加一。任何时刻若某个格子的水滴数大于等于 55,这个格子里的水滴就会向两侧爆开。此时,这个格子的水被清空,同时对于左方、右方两个方向同时进行以下操作:找到当前格子在对应方向上最近的有水的格子,如果存在这样的格子,将这个格子的水滴数加一。若在某个时刻,有多个格子的水滴数大于等于 55,则最靠左的先爆开。

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

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

小 C 开始了一局游戏并进行了 n 次操作。小 C 在每次操作后,会等到所有水滴数大于等于 55 的格子里的水滴都爆开再进行下一次操作。

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

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

输入格式

从标准输入读入数据。

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

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

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

输出格式

输出到标准输出。

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

思路

通过读题,可以发现,对一个格子进行操作,增加一滴水,如果爆的话只会影响到左右两个点,左右两个点如果再爆的话又会影响他们的左右点。每个点都是这样,只会影响到左右两个点,也就是前驱和后继。因此,可以考虑用静态链表来处理,记录每个点的前驱和后继。

c的范围很大,1e9,但是m只有3x1e5,而且题目中说了只会选择有水的格子进行操作,也就是在这m个格子里面选。因此,只要存储这m个格子就够了,再排序一下,用pre和nxt记录每个格子的前驱和后继。

然后每次操作,我们把大于等于5的格子放到优先队列里(优先队列:优先爆左,下标的小根堆),把这个格子从链表里删去,再对前驱和后继进行加一滴水,如果大于等于5就加入队列,依次处理队列里的格子就好了。

代码

#include <bits/stdc++.h>
#define N 300005
using namespace std;int c,n,m,p,vis[N];
map<int,int> idx;struct node{int p,w;//位置,水滴数量,int pre,nxt;//前驱,后继bool operator < (const node &b) const{//按位置升序return p<b.p;}
}a[N];int main(){cin>>c>>m>>n;for(int i=1;i<=m;i++){cin>>a[i].p>>a[i].w;}sort(a+1,a+1+m);for(int i=1;i<=m;i++){//静态链表预处理a[i].pre=i-1,a[i].nxt=i+1;idx[a[i].p]=i;}int ans=m;priority_queue<int,vector<int>,greater<int> > q; for(int i=1;i<=n;i++){cin>>p;int id=idx[p];a[id].w+=1;//水滴数加1//用vis标记之前有没有爆过,没有爆且水滴数>=5,就加入队列if(a[id].w>=5&&!vis[id]) q.push(id),vis[id]=1; while(q.size()){ans--;id=q.top();//最左边的先爆q.pop();int pre=a[id].pre,nxt=a[id].nxt;
//			cout<<"##"<<id<<" "<<pre<<" "<<nxt<<endl;a[pre].nxt=nxt;//更新静态链表a[nxt].pre=pre;if(pre>=1){//前驱a[pre].w+=1;if(a[pre].w>=5&&!vis[pre]) q.push(pre),vis[pre]=1;}if(nxt<=m){//后继a[nxt].w+=1;if(a[nxt].w>=5&&!vis[nxt]) q.push(nxt),vis[nxt]=1;}}cout<<ans<<endl;}return 0;
}

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

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

相关文章

无限免费泛域名SSL证书申请

如今https访问已经成为了网络安全的标识&#xff0c;SSL证书也成为了保护网站内用户信息安全和加密信息交互的手段之一。自2019年等保2.0的相应政策出台后&#xff0c;实现网站https访问也是必经环节之一。 当下SSL证书的相关政策也一直备受关注&#xff0c;有免费的SSL证书也…

探索Python循环:索引值的获取与应用

在Python编程中&#xff0c;我们经常需要在循环中使用索引值来访问列表、元组或其他序列类型的元素。本文将详细讲解如何在’for’循环中访问索引值&#xff0c;并提供示例代码及运行结果&#xff0c;帮助初学者更好地理解和应用这一概念。 基本原理 在Python中&#xff0c;f…

Failed to start tomcat.service: Unit is not loaded properly: Bad message 如何解决?

错误 “Failed to start tomcat.service: Unit is not loaded properly: Bad message” 通常意味着的 tomcat.service systemd 配置文件存在语法错误或配置不正确。为了解决这个问题&#xff0c;一步步检查和修正这个服务文件。 1. 检查 tomcat.service 文件 首先&#xff0c…

【机器学习】AI时代的核心驱动力

机器学习&#xff1a;AI时代的核心驱动力 一、引言二、机器学习的基本原理与应用三、机器学习算法概览四、代码实例&#xff1a;线性回归的Python实现 一、引言 在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经不再是科幻小说中的遥远概念&…

Spring MVC 介绍及其使用(详细)

目录 一.什么是SpringMVC呢&#xff1f; 1.1MVC的介绍 1.2SpringMVC和MVC的关系 二.SpringMVC的学习 第一步&#xff1a;创建项目 第二步&#xff0c;SpringMVC的连接 第三步&#xff0c;Spring MVC获取参数 第四步 SpringMVC的输出 总结 特点和优势 核心组件 一.什…

GA-CNN-LSTM多输入时序预测|遗传算法-卷积-长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

基于JAVAEE的停车场管理系统(论文 + 源码)

【免费】基于JAVAEE的停车场管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89292324 基于JAVAEE的停车场管理系统 摘 要 如今&#xff0c;我国现代化发展迅速&#xff0c;人口比例急剧上升&#xff0c;在一些大型的商场&#xff0c;显得就格外拥挤&…

支付宝小程序如何去除页面下拉回弹

描述&#xff1a;支付宝小程序页面下拉时会产生回弹&#xff0c;如果页面上有拖拽功能&#xff0c;会有影响 解决方法&#xff1a; 页面xx.config.js中设置&#xff1a;allowsBounceVertical: “NO” 官方文档&#xff1a;https://opensupport.alipay.com/support/FAQ/7110b5d…

使用 AI Assistant for Observability 和组织的运行手册增强 SRE 故障排除

作者&#xff1a;Almudena Sanz Oliv, Katrin Freihofner, Tom Grabowski 通过本指南&#xff0c;你的 SRE 团队可以实现增强的警报修复和事件管理。 可观测性 AI 助手可帮助用户使用自然语言界面探索和分析可观测性数据&#xff0c;利用自动函数调用来请求、分析和可视化数据…

Polygon

挨个判断每一个1的出现是否合法: 合法条件:要么在某一个行或列最后一个要么后面有1 #include<iostream> #include<string> #include<cstring> #include<algorithm> using namespace std; char g[1000][1000]; int n,t; int main() {cin>>t;whil…

搭建Docker私服镜像仓库Harbor

1、概述 Harbor是由VMware公司开源的企业级的Docker Registry管理项目&#xff0c;它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。 Harbor 的所有组件都在 Dcoker 中部署&#xff0c;所以 Harbor 可使用 Docker Compose 快速部署。 …

FonePaw Data Recovery for Mac:轻松恢复丢失数据

FonePaw Data Recovery for Mac是一款功能强大的数据恢复软件&#xff0c;专为Mac用户设计&#xff0c;帮助用户轻松恢复因各种原因丢失的数据。该软件支持从硬盘驱动器、存储卡、闪存驱动器等存储介质中恢复丢失或删除的文件&#xff0c;包括照片、视频、文档、电子邮件、音频…

力扣每日一题-收集垃圾的最少总时间-2024.5.11

力扣题目&#xff1a;收集垃圾的最少总时间 题目链接: 2391.收集垃圾的最少总时间 题目描述 代码纯享版 class Solution {public int garbageCollection(String[] garbage, int[] travel) {int sum 0;int last_M -1,last_P -1, last_G -1;for(int i 0; i < garbage.…

keil的jlink重新选择芯片识别

keil选择jlink要选择对应芯片&#xff0c;一旦选择成功会出现以下文件 如果选择错了芯片类型&#xff0c;就需要删除这两个文件&#xff0c;然后重新进入选择&#xff0c;就可以了

shiro-quickstart启动报错

说明&#xff1a;最近在学登录框架&#xff0c;记录一下学习刚shiro框架&#xff0c;启动快速入门样例的错误&#xff1b; 场景 把shiro代码download下来&#xff0c;打开samples&#xff08;样例&#xff09;包&#xff0c;打开快速入门&#xff0c;启动&#xff0c;报错&am…

HNU操作系统小班讨论-Windows、Linux文件系统

【题目描述】 叙述Windows、Linux文件系统的演化&#xff0c;比较他们的优劣 【PPT展示】

一三云服务器配置教程:要开放哪些端口?如何设置宝塔端口更安全?

布署宝塔面板云服务器需要开放哪些端口&#xff1f; 1、以一三云服务器为例&#xff0c;如需完整使用宝塔的所有功能&#xff0c;需要放行如下防火墙规则&#xff1a; 20/21————–&#xff08;FTP主动模式端口&#xff09; 39000-40000——&#xff08;FTP被动模式 -Linux …

LLM记录:五一 Llama 3 超级课堂

LLM记录&#xff1a;五一 Llama 3 超级课堂 想玩大模型&#xff0c;自己又没那个环境&#xff0c;参加五一 Llama 3 超级课堂&#xff0c;简单记录一下llama3-8b的相关体验&#xff0c;实在是邀请不到人&#xff0c;还好后面开放了24G显存&#xff0c;好歹模型能跑起来了&…

作为网络安全工程师需要掌握的安全小知识!

网络安全风险无处不在&#xff0c;今天为大家梳理了一些网络安全相关的小知识&#xff0c;希望能进一步提升大家的安全意识&#xff0c;帮助大家建立更加安全的网络环境。 一、主机电脑安全 1、操作系统安全&#xff1a;安装操作系统时需要选择合适的版本&#xff0c;及时打补…

Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具)

前言 Adobe Media Encoder&#xff08;简称Me&#xff09;是一款专业的音视频格式转码软件&#xff0c;文件格式转换软件。主要用来对音频和视频文件进行编码转换&#xff0c;支持格式非常多&#xff0c;使用系统预设设置&#xff0c;能更好的导出与相关设备兼容的文件。 系统…