2022.1.21 模拟赛
挂分挂分。
T1 一个关于字符串的问题 (words)
随便怎么做都可以,反正暴力都能过。
T2 第二个关于字符串的问题 (strings)
按位搜索的套路,从左到右枚举每一位,枚举并强制这一位选 \(c\) 计算方案数,然后 AC 自动机上 DP。
因为方案数会很大,和 \(10^{18}\) 取 \(\min\) 即可。
T3 金币与银币 (coins)
\(x=0\) 的情况,只用金币,因为两次的金币加起来进位一定不优,所以就是枚举长度做 01 背包。
\(x> 0\):发现 \(x\) 只能用来填补较低位,假设 \(x\) 最高位为 \(h\),\(k=h+2\),\(\ge k\) 的位一定只能由金币填。
而第 \(l+1\) 位可能是由银币加金币产生的进位。
低于位 \(k\) 的部分 \(r\) 分类讨论:
- \(r\in [0,x]\),只需要用银币填;
- \(r\in (x,x+2^i],x+2^i<2^k\),需要用 \(i\) 个金币和若干银币;
- \(r\in (x,x+2^i+2^j],2^l\le x+2^i< 2^k,x+2^i+2^j< 2^k\),需要 \(i+j\) 个金币。
模拟,复杂度 \(\mathcal O(y^2+Q\log x)\)。
总结:
T1 写的广义 SAM + 树剖,我 dfs(v)
前令 dep[u] -= dep[top[u]]
了然后 dep[]
就乱套了。
T2 数组开小了,还忘了统计 AC 自动机上的 fail 链和。
出错出的不少,多总结多注意把。