toyota2023spring-final-open 题解
感觉总体难度比 ARC 稍难?
在同步赛中 rk2,插入原比赛排名就低很多了。
A \(\color{green}\bigstar\)
先可以考虑推式子,但是比较阴间而且没啥用。
考虑先选出一个左上角的 \(p\times q\) 的矩阵,然后整体右移一个就是和加上 \(p\times q\),下移一格就是 \(p\times q\times m\)。
因此可以算出选 \(p\times q\) 后需要右移的步数,判断一下即可。
B \(\color{green}\bigstar\)
和国王游戏比较像,直接考虑贪心,考虑两个东西哪个放前面,可以得到式子:
直接排序即可。
C \(\color{blue}\bigstar\)
异或上好像并没有什么性质。
考虑设 \(c=A\oplus B\),那么 \(c|\gcd(a,b),c\le a-b\le R-L\)。
又因为 \(A\) 是 \(c\) 的倍数,因此可以枚举 \(c,A\),然后判断 \(B\) 是否合法。
复杂度调和级数。
D \(\color{green}\bigstar\)
首先第一位可以确定,每一个数都可以成为开头,比较后面的东西就相当于先做一个差分。
然后相当于是算一个类似后缀排序的东西,但又不这么像。
直接考虑暴力后缀排序,对于两个开始位置求 lcp,然后比较。
二分 + 哈希即可,复杂度 \(O(n\log n)\)。
E \(\color{Gold}\bigstar\)
赛时:只走 \(x\),走 \(n\) 步,这个东西都需要用多项式快速幂,这题肯定不可做。
赛后:走 \(n+1\) 步就对了???
比较高妙的双射题。
考虑先把路径放到一个序列上,每次走我们都先走 \(x\),再走 \(y\),因此考虑设 \(B_i\) 表示第 \(i\) 步 \(y\) 前我 \(x\) 走了 \(B_i\) 步,这样可以得到一个长度为 \(n\) 的序列 \(B\),然后发现此时需要钦定 \(A_0=1\),需要满足以下条件:
-
\(A_{B_i}=1\)。
-
\(\sum_{i=1}^n B_i=n\)。
-
\(\sum_{j=1}^i B_j\ge i\)。
回忆卡特兰数,相当于没有第一条限制,一般的方法是找到第一个位置然后翻转,但是这题显然不能这样,因为对 \(x\) 有限制,而对 \(y\) 无限制,翻转会破坏这个。
考虑卡特兰数另一个通项:\(\frac{\binom{2n}{n}}{n+1}\),尝试从这里去找性质。
对于任意一个不满足第三个条件的序列 \(c\),容易发现我们可以找到一个前缀和最小的地方,把它转到最前面,这样一定合法,但是这样的位置可能会有多个。
原来是 \(n\) 个 \(+1\),\(n\) 个 \(-1\),那么考虑变成 \(n+1\) 个 \(+1\),然后要求除了第一个位置以外的位置都 \(\ge 1\),那么开头唯一。
也就是说对于任意一个 \((n+1,n)\) 的序列,对应唯一一个合法序列,并且一个合法序列可以通过循环移位得到所有任意序列。
这样可以得到通项 \(\frac{\binom{2n+1}{n}}{2n+1}\),但是这并不是我们想要的。
因为我们限制了一个 \(-1\) 前面 \(+1\) 的个数,因此考虑把一个 \(-1\) 和它前面的 \(+1\) 变成整体,然后第一个加入的 \(+1\) 单独看成一个整体,对这个整体进行循环移位,可以发现依然满足上面的双射。
此时任意序列的个数相当于就是长度为 \(n+1\),和为 \(n\) 的序列个数,插板法之后就可以得到最终的通项:\(\frac{\binom{2n}{n}}{n+1}\)。
回到原题,相当于任意序列的每一个长度受到限制,但是可以直接算,就是相当于 \(f^{n+1}\),直接多项式快速幂即可,复杂度 \(O(n\log n)\)。