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}\) 内的答案,这些可以字符串哈希做。考虑跨区间的计数有两种:

  1. 中心在 \(s\) 内。

  2. 中心在 \(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 上的节点直接返回预处理的链和即可。

定位:最难题。

预计难度:紫。

饿呀啥

考虑拆贡献,实际上每个点是鹅或者是鸭都可以单独拆贡献,展开二次项后合理分配即可。

但是两个点如果相互指认那么就一个是鹅一个是鸭,互相影响。于是考虑如果有相互指认就连上边。无解通过二分图染色判断,最后会形成一些连通块,互相互不影响。这个整体有两种取值方案,有不同的代价,会带来不同的鸭子个数,考虑背包就做好了。

定位:中档题。

预计难度:蓝。

posted @ 2025-08-08 17:05  PM_pro  阅读(8)  评论(0)    收藏  举报