杂赛记录
校内比赛
2024.7.1:
赛时:235 寄
A 3983. 艾姆易艾克斯
首先我们知道当:
- \(a_i = b_i\),则该项是无贡献的,设该项个数为 \(s1\)。
- \(a_i \not = b_i\),则我们在这些中找 \(Mex\) 即可得第一问 \(ans\)。
我们再在 $a_i \not = b_i $ 中找出 \(a_i \not = ans\) 且 \(b_i \not = ans\),则该项也是无贡献的,设该项数目为 \(s2\)。
则第二问答案为 \(2^{s1+s2}\)。
复杂度线性或线性对数
B 3985. 雨とカプチーノ
原 [SDCPC2023] Building Company
首先可以知道每种咖啡是互相独立的 (首先个毛线!!)
首先离散化。
所以我们可以维护 \(n\) 个小根堆,对于每个赞助商若其所有条件都满足则我们将该赞助商加入一个队列,进行一次更新及加入。
复杂度线性对数。
C 3986. 水母序列
原「ROI 2017 Day 1」前往大都会
挺神的题。
- 引理:对于一个 \(r\) 及任意 \(l\) ,则 $f_{l,r} $ 的取值最多只有 \(logV\) 个。
这样我们就可以暴力找出每一个 \(r\) 对应的区间的三元组 \((pl,pr,r)\),考虑贡献。
考虑扫描线,将每个询问放到 \(r\) 上,则我们枚举 \(i\),每一个三元组 \((pl,pr,r)\),对于一个询问 \((ql,qr)\) 分为两种情况。
- \(ql \leq pl \leq pr \leq qr\),此时贡献为 \(pr-pl+1\),我们可以建一个树状数组 \(t1\) 维护,区间修改 \([1,pl-1]\) 的值。
- \(pl \leq ql \leq pr \leq qr\),此时贡献为 \(pr-ql+1\),我们分开来看,首先 \(pr+1\) 可以类似上一种情况建树状数组 \(t2\) 维护 \([pl,pr]\),再看 \(ql\) ,\(ql\) 是已知的,不过我们知道符合条件的区间个数,需要建个树状数组 \(t3\) 维护。
则每一个询问答案即为 \(t1(ql) + t2(ql) - ql \times t3(ql)\)。
用区间修改,单点查询树状数组维护即可(你想写线段树也行)。
复杂度 \(O(nlogV + mlogn)\)。
2024.7.2:
赛事:250 寄,吐槽:C 真的傻逼
A 3652. 筹办模拟赛
过于简单
如题写
可以类似前缀和的扩展。
或也可以设计 \(dp\),令 \(f_{i,j}\) 为前 \(i\) 个数字选 \(j\) 个乘积之和,则有转移式 \(f_{i,j} = f_{i-1,j-1} * a_i + f_{i-1,j}\)。
复杂度 \(O(n)\)。
C 3939. Vera 与现代艺术
原:CCO 2017 D1T3
智慧の题
因为加的是 \(highbit\) 的倍数,所以我们可以想到一个简单的维护二维前缀,用 \(map\) 是 \(O(qlog^3n)\),会寄 : (,可以手膜哈希减一个log,不过还是过不了。
我们可以发现对于每一个染色,所贡献的不是一段连续的区间,所以我们才不能用数据结构维护,我们可以进行一波转化:
- 将横纵坐标进行二进制翻转,即000110变为011000,此时的 \(highbit\) 变为了 \(lowbit\),所贡献的值正好是一段连续的区间,即 \([a-lowbit(a)+1,a+lowbit(a)+1]\) (这里的 \(a\) 是翻转后的值),则每个颜色横纵坐标所产生的贡献是一个矩阵,可以 扫描线+BIT 进行维护(区间修改,单点查询)。
复杂度 \(O(qlogn)\)。
D 3994. 雨だれの歌
原:XXI Open Cup, Grand Prix of Korea, B
不会,史。
2024.7.3
赛时:这是真寄 : (
A 3988. 不是一道路径查询问题
原:[SDCPC2023] Not Another Path Query Problem
我们来观察 \(V\),手膜下可以发现若有几个数的与 \(\geq V\),则我们可以把 \(V\) 变为 \(logV\) 个条件,使得这些数二进制的与为这些值,则我们可以维护 \(logV\) 个并查集,询问判断是否在同一并查集即可。
难,随机数据。
RT,神奇题,NP-Hard问题
首先我们考虑构造最大的答案,我们令每个都选择 \(\sqrt[n]{k}\) 个,则总方案数为 \((\sqrt[n]{k} + 1) ^ n > k\),则答案不超过 \(S\sqrt[n]{k}\)。
可以发现该式在 \(n > 3\) 时已经取到了 \(10^4\),且急剧递减。
所以我们分类讨论:
- \(n = 1:\) 显然。
- \(n = 2:\) 我们可以二分答案 \(mid\),转化为判定求 \(\sum_{i}\sum_{j} [i \times a_1 + j \times a_2 \leq mid] = \sum_{i}\left\lfloor\dfrac {mid - i \times a_1} {a_2}\right\rfloor\),我们令 \(a_1 \geq a_2\),则复杂度为 \(O(\frac {mid} {a_1})\),又因为 \(\frac {mid} {a_1} \leq \frac {2mid} S \leq \frac {2S\sqrt{k}} S = 2\sqrt{k}\),则总复杂度为 \(O(\sqrt{k}logk)\)。
- \(n \geq 3:\) 则 \(S\sqrt[n]{k} \leq 5\times 10^6\),此时我们跑完全背包计数,复杂度 \(O(nS\sqrt[n]{k})\) 在 \(n = 3\) 时取最大为 \(2\times 10^7\)。
还有点卡常。
2024.7.4
A 3131. 梦境
原 :NOIP2018 复赛(模拟赛) by IcePrincess T1
贪心 + 优先队列
B 3132. 玩具
原 :NOIP2018 复赛(模拟赛) by IcePrincess T2
挺难的 dp
C 3133. 飘雪圣域
原 :NOIP2018 复赛(模拟赛) by IcePrincess T3
莫队被卡哩 : (
直接考虑连通性是不好想的,我们换成观察边的性质,可以发现,这是一坨森林,每条边都能吧该图分成两个连通块,所以我们可以考虑边的数量。
我们考虑扫描线,用树状数组维护区间内存在边的数量,则答案即为 \(r - l + 1 - t.ask(l,r)\),即每条边都会将两个连通块合并成一个。
复杂度 \(O((n+q)logn)\)。
D 3996. 勇者
2024.7.5
赛时 : 120 pts ,D 题文件名寄哩,痛失 100pts
真实难度顺序:D < A < B < C
A 3754. 充电宝
原:[USACO21OPEN] United Cows of Farmer John G
我们考虑求每个元素的贡献,我们设 \(nx[i]\) 为 \(a_i\) 下一次出现的位置,则我们可以知道每个 \(i\) 只能在 \([i+1,nx[i]-1]\) 的位置算贡献,所以我们可以维护一个vector当桶存下标,这样我们从左向右枚举,每当枚举到 \(i\) 时,我们将该贡献撤销,添加 \(nx[i]\) 的贡献,用树状数组可维护。
或者也可以扫描线。
复杂度 \(O(nlogn)\)。
B 3775. 任务
听说很经典,但我不会。
神秘 dp,刚开始以为时诡异贪心 : (
我们设 \(f_{i,j,0/1}\) 表示前 \(i\) 个物品,第 \(i\) 个物品是 A/B 机器完成的,且另一个机器还需要消耗 \(j\) 的时间。(非常诡异的状态)
考虑到填表法不太容易实现,我们用刷表法。
分类讨论则有:
- \(a[i][p] \geq j:\)
- \(f_{i+1,a[i][p] - j,!p} = f_{i,j,p} + j\)
- \(f_{i+1,0,p} = f_{i,j,p} + a[i][p]\)
- \(a[i][p] < j:\)
- \(f_{i+1,j - a[i][p],p} = f_{i,j,p} + a[i][p]\)
- \(f_{i+1,0,!p} = f_{i,j,p} + j\)
复杂度 \(O(nt)\)。
C 3792. Spirits
原 :ATcoder_ARC083E
D 3938. 焚风现象
原 :JOI Final 2016 T1
裸的数据结构,线段树即可。
当然,考虑到是全局查询,可以差分。
复杂度 \(O(qlogn)\) 或 \(O(q + n)\)。
2024.7.6
休息一天,打场牛客的高校 ACM 线上同步赛van♂ : )。
因为凑不齐三人,只能两人凑合打
赛时:BEFHJK,rk 8
学长队成功登顶。
题太多了,就不补了(说的就是休息一天)。