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

下午

LOJ #6192. 「美团 CodeM 复赛」城市网络

考虑倍增。设 \(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 操作的返回值设成结构体,就不用再多写亿些函数啦!

CF920F SUM and REPLACE

对于 \(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 还算可以改。。

考虑补集转化

\[\begin{aligned} &\sum_{a=1}^n\sum_{b=a}^n[(99g(a,b)\le 100h(a,b))\land (99h(a,b)\le 100g(a,b))] \\ =&\frac{n(n+1)}{2}-\sum_{a=1}^n\sum_{b=a}^n[(99g(a,b)> 100h(a,b))\lor (99h(a,b)> 100g(a,b))] \\ =&\frac{n(n+1)}{2}-\sum_{a=1}^n\sum_{b=a}^n[(99g(a,b)> 100h(a,b))]-\sum_{a=1}^n\sum_{b=a}^n[(99h(a,b)> 100g(a,b))] \end{aligned} \]

对于形如 \(\sum_{a=1}^n\sum_{b=a}^n[(99g(a,b)> 100h(a,b))]\) 的计数:

定义 :

\[f(i)=\begin{cases} 0&(\mu(i)=0)\\ 99&(\mu(i)=1)\\ -100&(\mu(i)=-1) \end{cases}\\ S(n)=\sum_{i=1}^n f(i),S(0)=0 \]

\[\begin{aligned} &\sum_{a=1}^n\sum_{b=a}^n[(99g(a,b)> 100h(a,b))] \\ =&\sum_{a=1}^n\sum_{b=a}^n[S(b)-S(a-1)>0] \end{aligned} \]

这个可以树状数组统计,另一个同理,复杂度 \(\mathcal O(n\log n)\)

8.14

上午

改了昨天 T3。

可以发现

\[f(m)=\sum_{i=1}^m\sum_{j=1}^m[m\nmid ij]=m^2-\sum_{i=1}^m\sum_{j=1}^m[m\mid ij] \]

分开考虑。由于 \(n=\prod\limits_{i=1}^kp_i^{a_i}\) ,那么就有

\[\sum_{d\mid n}d^2=\prod_{i=1}^k\sum_{j=0}^{a_i}(p_i^j)^2 \]

直接使用等比数列求和公式即可。

对于后面部分,我们枚举\(w=\gcd(d,i)\) ,则有

\[\begin{aligned} &=\sum_{d\mid n}\sum_{i=1}^d\sum_{j=1}^d[d\mid ij]\\ &=\sum_{w=1}^n\sum_{d\mid n,w\mid d}\sum_{w\mid i}^d\sum_{j=1}^d[\frac dw\mid \frac iw\cdot j][\gcd(\frac dw,\frac iw)=1]\\ &=\sum_{w\mid n}\sum_{d\mid \frac nw}\sum_{j=1}^{wd}[d\mid j]\sum_{i=1}^{d}[\gcd(d,i)=1]\\ &=\sum_{w\mid n}\sum_{d\mid \frac nw}\sum_{j=1}^{wd}[d\mid j]\varphi(d)\\ &=\sum_{w\mid n}\sum_{d\mid \frac nw}\sum_{j=1}^{w}\varphi(d)\\ &=\sum_{w\mid n}w\sum_{d\mid \frac nw}\varphi(d)\\ &=\sum_{w\mid n}w\frac nw\\ &=n\cdot \sigma_0(n) \end{aligned} \]

二者相减即为答案。

下午

看了下今天考试的题。

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《组合数学》专题讲课。

Dirichlet 前缀和

把所有质数筛出来,然后用类似埃氏筛的方式更新答案。


YY的GCD

最小公倍数之和

都是莫反爆推式子。


CF57C Array

转化成插板法。

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。

晚上

《瞿葩的数字游戏》T3-三角圣地

容易发现第 \(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。

下午

打摆

改题。

没什么好改的。。

晚上

gsy 的合影照片

计蒜客的一道题。

枚举第一个交汇点,二分第二个。使用前缀 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 容斥。

posted @ 2021-08-10 17:11  csxsi  阅读(8)  评论(0)    收藏  举报