2021 暑假训练记录 Ⅱ
8.11
上午
联考 Day2。
T1 考虑矩阵积和式的图论意义,就是二分图完美匹配的边权积之和。
如果一个右部点度数是 \(0\),那么答案是 \(0\)。
如果一个右部点度数是 \(1\),它必须和与它相连的左部点匹配,然后删掉这个左部点以及与其相连的边,我们重复这个过程直到无法操作。
此时必然有每个点度数都是\(2\),那么它们构成了一些环,每个环有 \(2\) 种方案,环之间独立,乘一乘就完事了。
T2 暴力 20 分。
T3 T4 没写。
(赛后发现子文件夹外面没放代码,以为自己没分了。后来看 result 发现 tham 竟然帮我放了代码!!1
预估得分:100 + 20 + 0 + 0 = 120
实际得分:100 + 20 + 0 + 0 = 120
下午
考虑倍增。设 \(fa_{u,i}\) 表示 \(u\) 的 \(2^i\) 级祖先,\(mx_{u,i}\) 表示 \([u,u\) 的 \(2^i\) 级祖先 \()\) 路径上的最大权值(注意这里是一个左闭右开区间),\(g_{u,i}\) 表示 \(u\) 被替换 \(2^j\) 次到达的点。
这些都可以直接预处理。
询问时找到 \(u\) 的第一个权值比 \(c\) 大的祖先,然后直接倍增跳就行了。
考试题 T2 是轮廓线 dp,T3 容斥 + dp + 复杂度分析,T4 树哈希 + ddp。
8.12
全天
wangrx《数据结构》专题分享
GSS5 - Can you answer these queries V
线段树维护区间最大子段和,每个线段树节点维护 区间和、前缀最大和、后缀最大和、区间最大子段和,核心是 pushup。
这道题目需要对两个区间的包含情况分类讨论,然后直接算即可。
小技巧:把线段树 Query 操作的返回值设成结构体,就不用再多写亿些函数啦!
对于 \(d\),有:\(d(1) = 1\),\(d(2) = 2\),\(d(i)(i > 2) < i\)。\(d(x)\) 的增长大致与 \(\log^2 x\) 相当。
于是对于操作 2,\(a_i > 2\) 时暴力修改,大约 \(\log(\log^2)a_i = 2\log\log a_i\) 次就可变为 \(1\) 或 \(2\)。
若区间内均有 \(a_i \le 2\),修改没有影响,退出即可。
于是总复杂度为 \(\mathcal{O}(n\log\log \max a_i + m\log n)\),摊还复杂度为 \(\Theta(\log\log\max a_i + \log n)\),相当的上流。
8.13
上午
考试。
四题暴力,没什么说的。
预估得分:30 + 20 + 10 + 30 = 90。
实际得分:30 + 20 + 10 + 30 = 90。
下午
改题。
T4 还算可以改。。
考虑补集转化
对于形如 \(\sum_{a=1}^n\sum_{b=a}^n[(99g(a,b)> 100h(a,b))]\) 的计数:
定义 :
这个可以树状数组统计,另一个同理,复杂度 \(\mathcal O(n\log n)\)。
8.14
上午
改了昨天 T3。
可以发现
分开考虑。由于 \(n=\prod\limits_{i=1}^kp_i^{a_i}\) ,那么就有
直接使用等比数列求和公式即可。
对于后面部分,我们枚举\(w=\gcd(d,i)\) ,则有
二者相减即为答案。
下午
看了下今天考试的题。
T3 主要是有一个 trick:区间 \((l,r]\) 内 \([1,m]\) 每个数字出现次数相同可以转化为每个数字的前缀和 \(V_r-V_l\) 相等,可以用哈希表(unordered_map),每个数随机一个权值,且所有权值之和为 \(0\),直接在哈希表里面查找就行了。
8.15
晚上
打了场垃圾 CF,没什么好说的,直接看 sol。
8.16
上午
考试。
T1 T2 暴力,后面两题没怎么看。
T1 改完代码忘记编译爆零了。
状态不是很好。
预估得分:30 + 20 + 0 + 0 = 50。
实际得分:0 + 20 + 0 + 0 = 20。
下午
改题。
T3 zhy 的随机化思路很有启发性。具体大概就是对于每一条路线随机一个权值,然后将一个区间 \([l_i,r_i)\)(\(l_i<r_i\))都加上这一个权值,做一个前缀和 \(S_i\),开一个 unordered_map \(p\) 统计 \(S\) 相等的路 \(c_i\) 的和,答案就是 \(\sum C_i-\max\{p_x\}\)。
考虑这样做为什么是对的。如果两个点权值相等,那么肯定这两个点对应的路的覆盖情况也相同,那么他们就可以都不选。
T1 可以考虑 dp。
设 \(f_{i,0/1}\) 表示以 \(i\) 结尾的划分方案数,其中最后一个不合法 / 合法。
记 \(suf_i\) 为以 \(i\) 开头的后缀所代表的数 \(\% d\) 的结果。
区间 \([j,i]\) 合法当且仅当 \(\frac{suf_j-suf_{i+1}}{10^{n-i}}\equiv 0\pmod d\)。
对于 \(\gcd(d,10)=1\) 的情况,相当于 \(suf_j\equiv suf_{i+1}\pmod d\),可以直接开桶解决。
对于 \(\gcd(d,10)\not= 1\),设 \(D=2^x5^ym\),那么相当于要求 \(\%2^x,\%5^y,\%m\) 同时为 \(0\)。对于固定的 \(i\),在 \(j\le i-20\) 以后的贡献 \(\%2^x,\%5^y\) 都是 \(0\) 了(因为 \(2^{20}>10^6,5^{20}>10^6\)),只用考虑 \(\% m\) 的限制,此时同样可以对 \(\% m\) 开桶。对于 \(j>i-20\) 直接暴力即可。
8.17
全天
mnr《数论》专题讲课。
8.18
上午
考试。
T3 签到题直接树形背包,细节有点多调了比较久。。T4 打表找规律,然后用一下欧拉定理就行了。
前两题都只有 10 分的暴力。。
预估得分:10 + 27 + 100 + 100 = 237。
实际得分:10 + 10 + 100 + 100 = 220。
下午
改题。
T4 可以二项式定理每一项依次化开式子。
T1 「WC2007」剪刀石头布 + 竞赛图三元环期望个数,都是经典问题。
T2 SAM 匹配 + dp。
8.19
全天
xbk《组合数学》专题讲课。
把所有质数筛出来,然后用类似埃氏筛的方式更新答案。
都是莫反爆推式子。
转化成插板法。
8.20
上午
考试。
T1 反过来考虑,把删点变成加点。
后面只有暴力。
T4 看错题了。。
预估得分:100 + 30 + 0 + 5 = 135。
实际得分:100 + 30 + 0 + 0 = 130。
下午
改题。
T2 考虑每个点的贡献,点 \((i,j)\) 在操作 \(k\) 次后有贡献当且仅当 \(\binom{k}{i}\times \binom{k}{j}\) 为奇数,就是 \(k\&(i| j)=i|j\),这个可以高维前缀和直接做。\(k\) 只要考虑到 \(\max(n,m)\) 最高的二进制位。
T3 分类讨论后,去掉包含其他线段的线段可以直接 dp + 前缀和优化。
T4 点分治 + 树形 dp。
晚上
容易发现第 \(i\) 个位置对答案的贡献次数是 \(\binom{n-1}{i-1}\),从中间开始从大到小填数即可。
注意模数很小,要用 Lucas 定理。
8.21
上午
考试。
T1 贪心策略想假了。T3 T4 暴力。
预估得分:100 + 0 + 13 + 17 = 130。
实际得分:68 + 0 + 13 + 17 = 98。
下午
改题。
T1 每次贪心的选长链最长的,也可以按子树 size,倒过来按深度排序等。但注意按儿子个数排序是错的,可能获得 wa on test 100。
T2:
考虑 sg 函数有什么性质:对于一个 sg 值为 0 的局面进行任意操作都会使得 sg 值不为 0;对于一个 sg 值不为 0 的局面存在一种操作使得 sg 值为 0。
我们试图对这个游戏做类似的事情,构造的函数如下:
假设每一个点有一个权值 \(f_u\),定义一个没有出度的点 \(f_u=0\),其他每个点权值为他所有能一步到达的点的权值的 mex。定义 \(f(x)\) 为所有权值为 \(x\) 的点的点权异或和,整个游戏的权值是 \(\sum f(i)\)。
那么容易说明满足 对于任意一个权值为 0 的局面进行一次操作权值会不为 0,一个权值不为 0 的可以通过一次操作使得权值为 0,那么可以据此判断胜负。
至于构造方案,只要找最大的 \(i\) 使得 \(f(i)\ne 0\),然后选取一个点操作一下,容易说明必然可以找到这样的点。
8.23
上午
考试。
T1 一开始看错题了,区间是连续的,所以用双指针,维护区间内前 \(m\) 大,可以对顶堆或者重标号后线段树来做。
T2 暴力。
后两题没看。
预估得分:100 + 30 + 0 + 0 = 130。
实际得分:100 + 30 + 0 + 0 = 130。
下午
打摆
改题。
没什么好改的。。
晚上
计蒜客的一道题。
枚举第一个交汇点,二分第二个。使用前缀 max、后缀 max、区间 min ST 表进行二分,注意讨论的细节有点多。
8.24
上午
考试。
体验不是很好。。T1 想了很久还是只会暴力,T4 暴力还写挂。。
结果 T1 没开 freopen 爆零了。。
预估得分:80 + 0 + 0 + 15 = 95。
实际得分:0 + 0 + 0 + 0 = 0。
下午
今天的题其实不是很难啊。。
T1 对于每个质因子考虑,记录下每个数向后第一个能到的包含质因子 \(p\) 的位置,询问时直接查就行了。
T4 树形 dp。主要是有一个性质:对于子树 \(u\) 的所有点,其配对黑点至多只有 \(1\) 个在子树外(若有多个可以只留距离 \(u\) 点最近的)。然后设 \(dp_{u,i}\) 表示搞定 \(u\) 子树内所有点,且 \(u\) 和 \(i\) 配对的最小代价,记 \(f_u=\min(dp_{u,i})\),答案为 \(f_i\)。转移分类讨论即可。
T2 有点像模拟题,T3 高精度十进制转二进制 + 矩阵快速幂 + 并查集优化状态。
晚上
Codeforces Round #740 (Div. 1, based on VK Cup 2021 - Final (Engine))
A:枚举。
B:dp + 差分前缀和。
C:构造。
C 压哨绝杀失败。。。
\(\text{Rating Change:}2010\to 1989,-21\)。
8.25
上午
考试。
T2 nb 构造。看出了结论,也知道做法,但是特判判错了。。。边界一定要注意,不然会 100 -> 0。。。
预估得分:0 + 100 + 0 + 0 = 100。
实际得分:0 + 0 + 0 + 0 = 0。
下午
改题。
T3 交互非常巧妙,先算出整个序列的和(找众数),然后算出 \(1\sim500\) 的后缀和和 \(501\sim1000\) 的前缀和。因为这样每个数只有两种取值,这个过程可以从中间开始分成两边查询,每次移动 \(mid\),如果两种取值的差 \(\ge 3\) 就知道了这个区间的和。
8.26
上午
考试。
T1 SG 函数 + 枚举。T2 写了虚树但是被卡常成 40 了。。
T3 T4 暴力。
预估得分:100 + 100 + 20 + 20 = 240。
实际得分:100 + 40 + 20 + 20 = 180。
下午
改题。
T2 性质很好。
找到最深的点,然后对每个点求 \(dis\),找到直径,接着取中点就行了。整个过程只需要支持找 \(k\) 级祖先,用树剖或者倍增维护。
T3 巧妙 dp。T4 可以分治 or 找性质线段树。
晚上
Codeforces Round #741 (Div. 2)
过了 AD2。~D2 是蒯的~~
A:分类讨论。
B:结论+枚举。
C:找到一个 0 的位置即可。
D1:答案 \(\le2\)。直接判。
D2:记一下前缀和,然后用 vector 存一下前缀和对应的下标,二分即可。
E:结论:如果选了 \([l,r]\),就一定会选 \([l,n]\)。然后记录 LCP 直接 dp。
8.27
下午
考试。
只写了 T3 暴力。
预估得分:0 + 0 + 52 + 0 = 52。
实际得分:0 + 0 + 64 + 0 = 64。
晚上
改题。
T2 有一种区间 dp 的巧妙做法。
8.28
上午
后三题暴力。T4 没删调试。。
预估得分:0 + 50 + 5 + 50 = 105。
实际得分:0 + 50 + 5 + 40 = 95。
下午
改题感觉自己是憨憨。。。
T2 签到题。\(f_{i,j}\) 表示前 \(i\) 个字符选了 \(j\) 个,直接转移。
T1 nb 概率期望题,考虑增加一个环的贡献,然后枚举。
T3 转化题意,然后枚举左端点,右端点双指针 + 线段树维护。
T4 平面图最小割 = 对偶图最短路。
8.29
晚上
Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2)
过了 A ~ E。
A:分类讨论。
B:枚举。
C:恶心题,也是枚举,但细节特别多。
D:简单交互,算出所有 \(a_1+a_i\) 之后,算一下 \(a_2+a_3\),这样就可以知道 \(a_1\),然后对所有数排序直接输出。
E:先把序列变成 \(a_i-b_i\),操作就变成选择两个位置 \(p<q\),++a[p], --a[q]。把加法看成左括号,减法看成右括号。如果查询区间是一个合法括号序列就说明有解,答案是最大括号层数。
8.30
上午
考试。
T1 简单期望题,直接贪心即可。
T3 暴力。
T2 挂了。
预估得分:100 + 20 + 10 + 0 = 130。
实际得分:100 + 0 + 10 + 0 = 110。
下午
T2 贪心策略巧妙。按度数排序然后依次满足。
T3 AC 自动机 fail 树 + dp。
T4 minmax 容斥。

浙公网安备 33010602011771号