[做题记录] 2022年1月开始的刷题记录 (一)
- 【Shoi2015】超能粒子炮·改
- 【BZOJ】神犇和蒟蒻
- 【BZOJ】 上学路线
- 【BZOJ】 DZY Loves Math IV
- 【JLOI2015】 有意义的字符串
- 【UR #4】 追击圣诞老人
- 【UR #5】 怎样更有力气
- 【UR #5】 怎样跑的更快
- 【UR #6】 智商锁
- 【UR #6】 懒癌
- 【清华集训2014】玛里苟斯
- 【UR #2】猪猪侠再战括号序列
- 【UR #2】树上GCD
- [POI2010]MOS-Bridges
- 【UR #4】元旦激光炮
- 【BZOJ 4403】序列统计
- 【BZOJ 3394】Sum
- 「JOISC 2018 Day 1」道路建设
- [POI2010]TEL-Teleportation
- [POI2010]KOL-Railway
- [POI2010]ANT-Antisymmetry
- [POI2010]CHO-Hamsters
- [POI2010]KOR-Beads
- [POI2010]MOT-Monotonicity 2
- [POI2010]GRA-The Minima Game
- [POI2011]KON-Conspiracy
- [POI2011]SEJ-Strongbox
- [POI2011]ROZ-Difference
- [POI2011]SMI-Garbage
- [POI2011]TEM-Temperature
- [POI2011] DYN-Dynamite
- [POI2011]PRO-Programming Contest
- [POI2011]PAT-Sticks
- [POI2011]INS-Inspection
Fail 说明不独立做出
Accept 说明独立做出
【Shoi2015】超能粒子炮·改
Accept
拿Lucas推推式子就好。
【BZOJ】神犇和蒟蒻
Accept
\(\mu\) 的情况显然是 \(1\) 。
根据恒等式 \(\varphi(ij) = \varphi(i)\varphi(j)gcd(i, j)\frac{1}{\varphi(gcd(i, j))}\) 。
可以得到 \(\varphi(i^2) = i\varphi(i)\) 。杜教筛即可。
【BZOJ】 上学路线
Accept
经典容斥。
设 \(f_i\) 表示到 \(i\) 点的路径条数, 枚举路径经过的第一个点, 那么就是 \(f_j\) 乘一个组合数。
【BZOJ】 DZY Loves Math IV
Accept
求:
其中 \(n \leq 10^5, m \leq 10^9\) 。
考虑暴力枚举 \(n\) 。
设一个 \(f(n, m) = \sum_{i = 1}^m\varphi(in)\)
考虑套路地处理 \(n\) 。
设 \(n = \prod o_i^{a_i}, q = \prod o_i, p = \frac{n}{q}\) 。
那么有:
注意 \(n = 1\) 的时候可以直接杜教筛带走, 暴力递归即可。
中间那个变化就是对 \(gcd(i, q)\) 用 \(\varphi(d)\) 之类的代替, 然后观察到互质直接乘就好。
【JLOI2015】 有意义的字符串
Accept
观察到这个形式很像递推, 直接补项然后递推, 去掉最后一项就好。
【UR #4】 追击圣诞老人
Fail
看起来就像 \(k\) 短路。
那么考虑每次找到最小的序列然后扩展, 可以对每个点可以访问到的边开堆, 然后树上倍增和可持久化左偏树优化一下求堆可以做到时空两 \(\log\) 。
考虑用树剖优化这个过程, 那么用一个数对 \((x, y)\) 表示一条链上的堆, 每次只要支持链上求最小值就好, 可以用树剖实现。
预处理一下链上前缀 \(\min\) 可以做到 \(n \log_2 n\) 。
由于卡空间, 用 \(set\) 维护答案集合, 多于 \(k\) 就干掉。
【UR #5】 怎样更有力气
Fail
一看就是按照 \(w\) 排序。
不知道怎么处理连通块的问题, 记住拿度数最小点去讨论所有点的套路就好了。
【UR #5】 怎样跑的更快
Accept
考虑把 \(gcd\) 代表的函数用别的函数反演掉, 几次之后可以得解。
【UR #6】 智商锁
Fail
不太像人做的。。。
分四个组, 取小点跑生成树然后 \(\textit{meet on middle}\)
【UR #6】 懒癌
Fail
可以在出阴间模拟赛的时候搬。
可以根据决策办法得到一个状压dp, 然后分析性质到图上以后转化为图论解决, 不太会。
【清华集训2014】玛里苟斯
Fail
发现 \(k \geq 3\) 可以暴力。
\(k \leq 2\) 可以直接讨论。
【UR #2】猪猪侠再战括号序列
Accept
被惯性思维误导了。
看到括号序列自然对应到折线上去反而有点迷茫。
考虑直接从左往右扫, 考虑把所有右括号变成左括号, 直接每次看到右括号就去找个左括号翻过来就好。
【UR #2】树上GCD
Fail
没有想到可以对长度根号分治这个事情。
直接祖先关系的直接处理, \(d \leq \sqrt{n}\) 的做树形 \(dp\) , \(d\ge\sqrt{n}\) 的情况启发式合并, 最多只会合并 \(\sqrt{n}\) 次。每种处理方式都是维护一个桶存距离是 \(d\) 的倍数的点有多少个。
话说这个dp的转移方式好神秘哦(。
[POI2010]MOS-Bridges
Accept
混合图欧拉回路的板板。
【UR #4】元旦激光炮
Accept
对每个数组取 \(k / 3\) 讨论就可以得到一个 \(100\) 次的做法。
同时对三个数组下标二分可以做到 \(3 \log_2n\) 。
大概就是每次取所有的 \(mid\) 然后决策一下其中一个的最小值就好了。
【BZOJ 4403】序列统计
Accept
憨憨题。
显然是一个隔板法可以解决的问题, 一个上指标求和就好了。
【BZOJ 3394】Sum
Accept
杜教筛模板。
记得 \(\phi \ * \ I = Id\) 。
函数 \(f\) 里面带 \(i\) 的, 在函数 \(g\) 里面配一个 \(i\) 就好。
「JOISC 2018 Day 1」道路建设
Accept
看起来是个LCT写一发WA了。
发现离散化挂了, 伞兵。
[POI2010]TEL-Teleportation
Accept
有意思的题。
考虑把图分为六个部分 \(A, B, C, D, E, F\) 。
A, F 就是起点终点, B, E 可以确定, 然后 C, D, 看连边, 自由点随便找一个丢就好。
[POI2010]KOL-Railway
Accept
有一个经典的结论是 \(i < j < k\) 且 $a_k < a_i < a_j $ 等价于 \(i, j\) 不能进入同一个栈。
那么有一个暴力就是根据这个直接连边, 然后每次贪心染色就好。
但是这样建图的复杂度是 \(n^ 2\) 的, 考虑优化。
由于我们只需要知道每个点染色情况, 其实可以对每个连通块保留一棵生成树。
考虑进行这样一个操作, 将 \(i\) 从小到大加入, 然后每次找一条边连上(可能找不到)。
即手上有一个 \(j\), 在前面找一个 \(i\), 使得 后面存在点 \(k\), 满足要连边的这个条件就可以找到一条边。
考虑用可并堆维护所有联通块里面的 \(a_i\) 最小点, 然后处理一个后缀最小值, 每次取出 \(a_i\) 最小的合并就行。
[POI2010]ANT-Antisymmetry
Accept
直接manacher就行。
[POI2010]CHO-Hamsters
Accept
憨题。
每次枚举一个字符串转移, 矩阵优化就好。
[POI2010]KOR-Beads
Accept
调和级数枚举一下哈希一下完事了。
[POI2010]MOT-Monotonicity 2
Accept
随便树状数组维护一下转移就行。
[POI2010]GRA-The Minima Game
Accept
虽然不知道怎么做, 但是可以发现就直接选一段最大的部分, 那就可以有简单的 \(n^2\) dp, 可以简单做一个前缀优化。
[POI2011]KON-Conspiracy
Fail
很好, 有被教育到。
首先判方案有个 \(2-SAT\) 的 sb 做法相信是个人就会。
但是有个很简单的做法。
发现在团里面点度数大于独立集, 那么就可以直接从度数大往小了加, 每次能加就加。
然后最后发现拿出去不超过两个点, 暴力枚举 \(n\) 种答案是否合法就行。
[POI2011]SEJ-Strongbox
Fail
观察到如果 \(x\) 是密码那么 \(2x\) 也是。
可以观察到一定有最小 \(x | n\) 的性质。
那么可以大力枚举然后剪枝啥的搞搞就好。
[POI2011]ROZ-Difference
Accept
枚举最大的字符最小的字符,做归并即可。
[POI2011]SMI-Garbage
Fail
降智了。
保留要跑的边搞欧拉回路就好了。
[POI2011]TEM-Temperature
Accept
双指针扫就完了。
[POI2011] DYN-Dynamite
Accept
难得一次写对这种贪心。
记录子树里面里 \(x\) 最远的未选择点和最近的选择点就可以考虑子树内外的覆盖情况了。
那么二分答案以后贪心判断即可。
[POI2011]PRO-Programming Contest
Accept
简单的费用流模型, 但是会TLE。
不难发现可以动态增边, 这样就可以了。
[POI2011]PAT-Sticks
Accept
小木棍排序以后选三条最大的边存下就好。
[POI2011]INS-Inspection
Accept
根据榕树之心的经典结论发现只有重心是可能的, 那么暴力即可。