2025.8
P5186 [COCI 2009/2010 #4] OGRADA
注意到每个位置最高能刷到的位置是能覆盖这个位置的长度为 \(X\) 的区间的最小值的最大值。
首先求每个长度为 \(X\) 的区间的最小值,用单调队列。
最大值也单调队列。
最后贪心。刚开始想的是记录每个点被刷的(作为区间最小值)的最左端的区间,然后去重的区间数量就是答案。但不会写。。
对于极大连续长度为 \(c\) 的段,需要刷 \(\lceil \frac{c}{X} \rceil\)。
P4323 [JSOI2016] 独特的树叶
即是说 \(B\) 删去一个叶子节点后与 \(A\) 同构。
CF1800G Symmetree
给定一棵树,\(1\) 为根。你可以调整一个点的儿子顺序,问这棵树是否有可能对称。
镜像一定同构,在根节点处的哈希值相等。
奇数还要选一个当中间节点递归下去。
P6084 [JSOI2015] isomorphism
以某个叶子为根,度数为 \(2\) 的点就在叶子到根路径的链。
P2325 [SCOI2005] 王室联邦
用栈存储未分块的点。在 \(u\) 每处理一个子树,若栈大小大于等于 \(B\),则分块,省会为 \(u\)。
最后把 \(u\) 加入栈。
发现传上去之多 \(B\) 个点,每个块大小最大为 \(2B - 1\)。
最后可能还有 \(B\) 个点,分到根节点的块,大小最多为 \(3B - 1\)。
时间复杂度为 \(O(nB+\frac{n^2}{B})\)。
P3986 斐波那契数列
考虑到这形如解 \(fib_na + fib_{n+1}b = k\) 的解的数量。
而 \(n\) 是极小的,于是里面可以用 exgcd 求解。
P6105 [Ynoi2010] y-fast trie
分讨。
\(C\le i+j\lt 2C\),维护最大值和次大值就行。
\(0\le i + j\lt C\),对于每个 \(i\),有唯一的 \(j\) 满足条件且 \(i + j\) 最大。
于是维护这个的最大值没有可减性,于是可以线段树分治!
考虑强制在线怎么做?
设 \((a, b)\) 表示 \(a\) 的最有匹配是 \(b\)。
发现,若 \((a, b), (b, c)\),且 \(a\lt c\),那么只需要保留 \((b, c)\)。
于是对数就变为 \(O(n)\),每次只需要修改 \(O(1)\) 个对。
multiset.count()
复杂度是 \(O(n)\)!
P5017 [NOIP 2018 普及组] 摆渡车
Sol 1
\(t\) 升序排序,定义 \(f_{i, j}\) 表示把前 \(i\) 个人送到人民大学的最小代价,\(i\) 的等待时间是 \(j\)。
当 \(t_{i+1}\le a_{i}+j\),显然让 \(i, i+1\) 一起走优。
否则,就需要枚举 \(i+1\) 的等待时间。
考虑等待时间的最大值,当一个点等待时间大于 \(m\),显然可以先把前面的送了,在预计时间到达车站即可。
但是,需要考虑到车回来有 \(m\) 的时间,可能回来后只有 \(m-1\) 时间了,不够先送。
于是等待时间小于 \(2m\)。
\(O(nm^2)\)
考虑填表法,\(f_{i,j}\gets f_{i-1, k}\),发现随 \(j\) 增大,\(k\) 的可行范围也在变大,于是用个变量存储最小值即可。
\(O(nm)\)
Sol 2
依赖值域的做法。
Link
P1450 [HAOI2008] 硬币购物
考虑先预处理出每个价值的答案。
然后询问时,容斥。
具体地说,钦定第 \(i\) 种硬币超出限制,就减去 \((d_i+1)c_i\)。
P1447 [NOI2010] 能量采集
在 \((x, y)\) 前面的点可以表示为 \((\frac{x}{d},\frac{y}{d})\),且 \(\frac{x}{d}, \frac{y}{d}\in \mathbb{Z}\)。
注意,\(d\) 可以不是整数
\(\gcd(\frac{x}{d}, \frac{y}{d}) = \frac{1}{d}\gcd(x, y)\)。
那么对于可行的 \(d\),设有 \(k\) 个,\(\gcd(\frac{x}{d}, \frac{y}{d})\) 有 \(k\) 个,且为整数。
那就有 \(k = \gcd(x, y)\)。
除去自己本身,就有 \(\gcd(x, y) - 1\) 在前面。
于是只需要求
于是有了 \(O(n\sqrt{n})\) 做法。
继续推
换元 \(T = dz\),
后面是 \(id * \mu = \varphi\)。
\(O(\min(n, m))\)
Sol 2
设 \(f(z)\) 为 \(\gcd(x, y) = z\) 的对数,\(g(z)\) 为 \(z | \gcd(x, y)\) 的对数。
\(g(z) = \lfloor\frac{n}{z}\rfloor \lfloor\frac{m}{z}\rfloor\)。
\(O(n\log{n})\)
P2303 [SDOI2012] Longge 的问题
\(O(\sqrt{n})\) 枚举每个 \(d\),\(O(\sqrt{n})\) 算 \(\phi\)。
Sol 2
【洛谷题解】P2303 [SDOi2012]Longge的问题 - 粉兔 - 博客园
P13056 [GCJ 2020 #1B] Expogo
等价于把 \(X, Y\) 二进制表示下。
指数不交,且并集是 \(\mathbb{N}\) 的前缀。
先二进制表示,如果有交,需要通过一定方式转化为无交。
用 \(2^{i}+2^{i+1}+2^{i+2}+2^{j} = 2^{j+1} - 2^{i}\)。
这个可以设计一个 dp 来判断。
无交过后,可以通过 \(2^i = 2^{i+1}-2^{i}\) 把前缀填满。
感觉这个判断很假啊。事实上,确实过不了。
P10638 BZOJ4355 Play with sequence
吉司机线段树板题。
注意,不要特判 \(-\infty + a = -\infty\) 这样的东西。
因为取 \(\max\) 可能把原来的 \(-\infty\) 减掉。
P13100 [FJCPC 2025] 众数T
考虑答案是 \(\min + \max\)。
因为覆盖了 \(\min + \max\) 的情况是最多的。
考虑答案是 \(2 \max\)。
只有一个最小值时,且其他值都是最大值。
[ABC196E] Filters
考虑刚开始 \(f(x) = x\)。
然后复合一些函数。
最后形如两端直线,中间 \(k=1\) 的直线的形态。
CodeChef Modulo Equality
每次操作使一个 \(A_i\) 加一。
求最小操作次数,使 \(A_i\bmod B_i\) 都相等。
先找到最小的 \(B_i\),设为 \(minB\),把其他大于等于 \(minB\) 的先加到 \(0\)。
考虑一个环,当前决策点是 \(x\)。
左边的贡献是 \(x - y\),右边的贡献是 \(B_{y}-y+x\)。
直接做就行。
CF1269B Modulo Equality
给定序列 \(a, b\),找到一个最小的数 \(x\),序列 \((a_i+x)\bmod m\) 排序后,每个元素与对应位置的 \(b_i\) 相等。
\(a_i\) 排序。
然后相当于一段后缀 \(-m\) 变到了最前面,每次增减 \(O(1)\) 个差值。
若某次差值集合与 \(b\) 相同,则找到答案。
哈希或 KMP 匹配。
P4249 [WC2007] 剪刀石头布
考虑容斥。
变为所有三元组减去不合法三元组。
不合法三元组一定有且仅有一个点指向另外两个点。
设 \(c_i\) 为 \(i\) 指出去的边的数量。
最小化
后面这个是定值。
前面这个直接费用流。
CF600E Lomsat gelral
CF1767F Two Subtrees
四维莫队:CF1767F Two Subtrees。
CF232E Quick Tortoise
好神的题。
CF232E Quick Tortoise - 洛谷专栏
UVA12716 GCD等于XOR GCD XOR
异或是二进制不进位加法或不退位减法,所以 \(x-y\le x \ \mathrm{xor} \ y \le x + y\)。
假设 \(x\ge y\),设 \(\gcd(x, y) = m\),则 \(x = x_0m, y = y_0m\)。\(x - y = m(x_0 - y_0)\gt m = \gcd(x, y)\)。
所以 \(\gcd(x, y) = x \ \mathrm{xor} \ y = x - y\)。
先枚举 \(z\),再枚举 \(y\)。