Day10 备战CCF-CSP练习

news/2024/10/21 9:45:29

Day10

题目描述

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

CSP202403-4-0.jpeg

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

输入格式

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

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

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

输出格式

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

数据范围

对于所有测试数据

  • \(1≤c≤10^9,1≤m≤min(c,3×10^5),1≤n≤4m\)
  • \(1≤x,p≤c,1≤w≤4\)
  • 输入的所有 \(x\) 两两不同;
  • 对于每个输入的 \(p\),保证在对应操作时 \(p\) 内有水。
子任务编号 \(c \le\) \(m \le\) 特殊性质
\(1\) \(30\) \(30\)
\(2\) \(3000\) \(3000\)
\(3\) \(3000\) \(3000\)
\(4\) \(10^9\) \(3000\)
\(5\) \(3×10^5\) \(3×10^5\)
\(6\) \(10^9\) \(3×10^5\)
\(7\) \(10^9\) \(3×10^5\)

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

输入样例:

5 5 2
1 2
2 4
3 4
4 4
5 2
3
1

输出样例:

2
1

题目分析

一道模拟题,根据数据量的不同采用不同形式的数据结构维护格子水滴数量

我们直接来考虑最大的即可

\(c \le 10^9 , m \le 3×10^5\) 很明显,这个数据就是在告诉我们要去离散化有水滴的点
与此同时,我们还要维护水滴的点数,如果超过\(5\),就要清零并且左右都要++

那其实,用一个双向链表就可以维护这样一个有头有尾的序列了,清零后相当于要去删除这个点即可,然后再去搜索左面和右面的点,递归维护水滴点数和序列。

对于整个序列而言,长度为\(m\),所以再怎么做操作,对于\(n\)次的操作,最多就是把整个序列全部清空,也就是扫一遍整个序列,时间复杂度\(O(m)\),而对于其他步骤,一个是找到目标点,为了速度更快,直接使用哈希表存储编号和目标位置即可,另一个是对原有的水滴排序构造双向链表,排序\(O(mlogm)\),构造\(O(m)\),所以算法时间复杂度为\(O(mlogm)\)

这里代码真正实现的时候,为了方便,我使用了map直接当作双向链表,因为它可以直接进行关键字的排序,更方便找前序和后继节点,其余部分不变,map的大小即为答案。

注意:Acwing上要开\(O(2)\)\(O(3)\)优化,编译器没做到自动优化会爆内存。其余做过\(O(2)\)优化的就不用了

C++代码实现

#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
using namespace std;int c , m , n;
map<int , map<int , int>::iterator> mp;
map<int , int> s;
int x , w;void dfs(map<int , int>::iterator x)
{// cout << "x : " << x->first << '\n';bool flag_pre = (x == s.begin());bool flag_last = (x == -- s.end());auto pre = x;if(!flag_pre) pre --, pre->second ++;auto last = x;if(!flag_last) last ++ , last->second ++;s.erase(x);// for(auto [k , v] : s)//     cout << v << ' ';// cout <<  '\n';if(!flag_pre && pre->second >= 5) dfs(pre);else if(!flag_last && last->second >= 5) dfs(last);}int main()
{ios::sync_with_stdio(false);cin.tie(0) , cout.tie(0);cin >> c >> m >> n;while (m -- ){cin >> x >> w;mp[x] = s.insert({x , w}).first;}int k;while(n --){cin >> k;s[k] ++;if(s[k] >= 5)dfs(mp[k]);cout << s.size() << '\n';}
}

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

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

相关文章

YOLOv11环境搭建推理测试

引子 2024年9月30日,Ultralytics在其活动YOLOVision中正式发布了YOLOv 11。YOLOv 11是由位于美国和西班牙的Ultralytics团队开发的YOLO的最新版本。几个月前YOLOv10发布(感兴趣的童鞋可以移步https://blog.csdn.net/zzq1989_/article/details/139408779?spm=1001.2014.3001.…

SDCN:《Structural Deep Clustering Network》

代码:https://github.com/461054993/SDCN 摘要 聚类是数据分析中的一项基本任务。 最近,主要从深度学习方法中获得灵感的深度聚类实现了最先进的性能,并引起了相当大的关注。 当前的深度聚类方法通常借助深度学习强大的表示能力(例如自动编码器)来提高聚类结果,这表明学习…

TCP和UDP的报文格式

TCP和UDP的报文格式概要了解TCP和UDP的报文格式对于网络通信、系统设计、故障排查和安全性等多个方面都非常重要。一、TCP 报文格式(Transmission Control Protocol)TCP是面向连接、可靠的传输协议,其报文格式较复杂。TCP报文的格式如下: 上图简化如下:| 源端口(16位…

008数据绑定

v-bind 单向数据绑定 v-model 双向数据绑定

极速、便捷!一个接入 AI 的匿名在线即时聊天室!

AQChat —— 一个已接入 AI 的极速、便捷的匿名在线即时 AI 聊天室。基于 Netty 以及 protobuf 协议实现高性能,对标游戏后端开发。大家好,我是 Java陈序员。 之前给大家推荐过一款基于 livekit 和 Next.js 的匿名聊天室。 今天,再给大家介绍一个便捷开源的匿名在线聊天室,…

MoH:融合混合专家机制的高效多头注意力模型及其在视觉语言任务中的应用

在深度学习领域,多头注意力机制一直是Transformer模型的核心组成部分,在自然语言处理和计算机视觉任务中取得了巨大成功。然而,研究表明并非所有的注意力头都具有同等重要性,许多注意力头可以在不影响模型精度的情况下被剪枝。基于这一洞察,这篇论文提出了一种名为混合头注意力…

10.14-10.20 总结

1234567890联考题解:https://www.cnblogs.com/british-union/p/liankao.html 如果忽略挂分,这周打的还可以。但是问题是挂了不少分导致实际得分远不如期望得分。 做题: 做了几道 Project Euler,有一道没想出来:588,638,457,307。 P10353:群论题 AGC012F 尝试枚举一下前…

C10-08-宽字节注入-mysql注入之getshell-sqlmap

一 宽字节注入 利用宽字节注入实现“库名-表名”的注入过程。 靶场环境:容器镜像:area39/pikachu 宽字节概念1、如果一个字符的大小是一个字节的,称为窄字节; 2、如果一个字符的大小是两个及以上字节的,称为宽字节; 像GB2312、GBK、GB18030、BIG5、Shift_JIS等编码都是常…