NOIP Day 1 题解
LCP
诈骗题,观察到答案 <= 3。
枚举 \(i\),若 \(a_{1}\ne b_{i+1}\),且存在 \(j(j>i+1)\) 使得 \(c_{j} \ne a_{1},c_{j} \ne b_{i+1}\),即可以取到 \(0\)。
对于 \(1\) 同样的套路记录两个字符讨论一下即可。
不存在 \(2\),剩下的情况即为 \(3\)。
定位:签到题。
预计难度:黄。
排序
容易知道按 \(a_{i}\) 为第一关键字从小到大,按 \(b_{i}\) 为第二关键字从大到小得到的序列取到最优答案。
算答案的时候推下式子即可。
定位:签到题。
预计难度:黄。
字符串
先统计只在 \(t_{i}\) 内的数量。再考虑单独在 \(s_{i}\) 内的答案,这些可以字符串哈希做。考虑跨区间的计数有两种:
-
中心在 \(s\) 内。
-
中心在 \(t\) 内。
这两种情况对称,不如考虑 \(1\) 情况。
枚举中心 \(k\),那么首先在 \(s\) 里的必须回文。然后设 \(s\) 的长度为 \(len\)。就需要找到所有 \(j\),使得 \(t_{1}\dots t_{j}=s_{k-(len-k)-1}\dots s_{k-(len-k)-j}\)。
有一个套路是把所有 \(t\) 塞到 trie 里面,记录上点权加一,然后对于每一个前缀哈希值映射到 trie 里的一个节点,再累加 trie 树上根的当前节点的链上所有点权的和。然后二分 \(j\) 的最大值之后哈希值映射到 trie 上的节点直接返回预处理的链和即可。
定位:最难题。
预计难度:紫。
饿呀啥
考虑拆贡献,实际上每个点是鹅或者是鸭都可以单独拆贡献,展开二次项后合理分配即可。
但是两个点如果相互指认那么就一个是鹅一个是鸭,互相影响。于是考虑如果有相互指认就连上边。无解通过二分图染色判断,最后会形成一些连通块,互相互不影响。这个整体有两种取值方案,有不同的代价,会带来不同的鸭子个数,考虑背包就做好了。
定位:中档题。
预计难度:蓝。

浙公网安备 33010602011771号