首页 > 不点两面(hard version)
头像 kilomatutinal
发表于 2026-03-06 08:49:30
这道题简直超级简单喵!我们只要学会临界检测就可以了喵!因为m最大只有1e5.所以我们只需要直接列一个大小为m的数组用来存储安全牌被保证的次数喵~假如对于每个num,可以保证它前后的num-3和num+3是安全牌。对于每个牌,我们只需要改变num-3和num+3的安全牌被保证的次数就可以了喵!当安全牌 展开全文
头像 迎风踏雪
发表于 2023-02-25 21:55:22
不点两面 (安全牌) 我愿称这思路为 先斩后奏【拿到牌直接先分出安全牌,先不管(op)是拿牌 还是弃牌】(有python和c++的代码 思路一样 可以看逐行注解) c++代码 #include<bits/stdc++.h> const int N=1e7+10; int a[N];//判 展开全文
头像 憨憨的竹林
发表于 2026-03-06 02:25:09
纯正的模拟题,但是蒟蒻主包写的时候因为一些小bug调了好久,半夜有点红温本题的核心是用map去存储对方牌河中牌的数量,以及分op=1和op=2两种情况分别进行分析另外我们要开一个数组去记录每张牌是否是安全牌状态当op=1时,因为增加了一张数值为num的牌(mp[n]++),所以数值为n-3和n+3的 展开全文
头像 Night_crusing
发表于 2026-03-06 09:05:48
这个题目有一点表述不清,出现过的指的是现有的牌河内存在的。对于加入牌河的num 其会使得 num+3 和 num-3安全,只要这两个值合法就可以加入set(用来去重),对于移出牌河的num如果这次操作使得它的出现次数归零显然会影响num+3 和 num-3 这就需要我们去检查num-6 num-3 展开全文
头像 AliLexiWalker
发表于 2026-03-06 13:24:01
这题核心就一句: 一个数字 x 安不安全,只看牌河里有没有 x-3 或 x+3,和张数本身没关系。 所以我们维护两类信息: c[v]:牌河里数字 v 现在有几张(多重集合计数)。 s[x]:当前有多少个“活跃数字”在保护 x。 也就是有多少个 v 满足 v-3=x 或 v+3=x 且 c[v]&g 展开全文
头像 是个NULL
发表于 2026-03-06 15:55:56
当我看到题的时候,我的第一反应哈希来写,就是我建立一个cnt数组,记录安全数字的出现次数,我对那个数+3或-3的值进行自增或自减,每次输入之后去遍历哈希,只要非零就让结果++,不过很显然每次都遍历哈希,1e5*2*1e5会爆掉的;所以我们换个计算个数的策略,依旧开一个哈希数组cnt来记录安全次数,( 展开全文
头像 pandaC222
发表于 2026-03-06 16:14:26
我们模拟过程,注意边界即可代码如下: #include<bits/stdc++.h> using namespace std; #define int long long #define debug(x) cerr << #x << ": " 展开全文
头像 quchen666
发表于 2026-03-06 21:48:00
#include <bits/stdc++.h> using namespace std; const int N=3e5+10; const int mod = 998244353; typedef long long ll; typedef unsigned long long ul 展开全文
头像 此在Dasein
发表于 2026-03-06 06:42:57
某张牌在牌河中的状态变化,只会影响与其距离为 3 的特定位置的“安全状态”。 采用 状态驱动的贡献计数。我们维护一个全局变量 ans 表示当前安全牌的总种数,以及一个频率数组 cnt[] 记录牌河中每种数字的出现次数。 考虑牌 进入或离开牌河时,它仅对以下两个位置的安全性产生直接影响: 位置 : 展开全文
头像 olone
发表于 2026-03-06 10:32:07
#include<bits/stdc++.h> using namespace std; const int M = 1e5+5; int m,q; int cnt[M]; int main() { ios::sync_with_stdio(false); cin 展开全文

等你来战

查看全部