HDU 6942 CCPC Strings题解
HDU6942. CCPC Strings
题意:长度为的只含有"C"或"P"的字符串共有个,问:这所有个字符串中含有多少个"CCPC"(每一个"CCPC"之间不能相互重叠,即"CCPCCPC"中只能算个"CCPC")
分析:
假设所有长度为的"CP"字符串中互不重叠的"CCPC"的个数为
若认为可以相互重叠,可以通过计算贡献的方式进行计算
// 1. CCPC***...*****(只关注子串[1...4]的贡献) // 2. *CCPC**...*****(只关注子串[2...5]的贡献) // 3. **CCPC*...*****(只关注子串[3...6]的贡献) // 4. ***CCPC...*****(只关注子串[4...7]的贡献) // 5. ****CCP...*****(只关注子串[5...8]的贡献) // 6. *****CC...*****(只关注子串[6...9]的贡献) // . // . // . //n-4. *******...CCPC*(只关注子串[n-4...n-1]的贡献) //n-3. *******...*CCPC(只关注子串[n-3...n]的贡献)
"CCPC"有种摆法,剩下个字符随便选
答案即为
然而,题目要求每一个"CCPC"之间不能相互重叠
可以发现
发生重叠,发生重叠,发生重叠,...
和上面的计算方法一样
即"CCPCCPC"有种摆法,剩下个字符随便选
总共为
减掉这些,发现减多了
减多了哪些?
发生重叠,发生重叠,发生重叠,...
即"CCPCCPCCPC"有种摆法,剩下个字符随便选
总共为
加上这些,发现加多了
加多了哪些?
……
以此类推,容斥原理
答案为
从而有这个
所以zyf大佬送给我的递推式是对的(干得漂亮)
然而这题到这还没完,题目条件,线性递推搞不定
啊这,梦回高中
由于
有
令,有
令,有
由及
所以
由
代码:
#include <cstdio> typedef long long Lint; const Lint mod = 1e9 + 7; Lint fpow(Lint a, Lint n) { Lint res = 1; for (; n; n >>= 1) { if (n & 1) res = res * a % mod; a = a * a % mod; } return res; } Lint minv(Lint a) { return fpow(a, mod - 2); } Lint ainv(Lint a) { return mod - a; } Lint mod_add(Lint a, Lint b) { return (a + b) % mod; } Lint mod_mul(Lint a, Lint b) { return a * b % mod; } Lint kn1n(Lint k, Lint n) { return n % 2 ? ainv(k) : k; } const Lint inv1 = minv(54); const Lint inv2 = minv(27); const Lint inv3 = mod_mul(2, inv2); int main() { int T; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); int r = n % 3, k = n / 3; Lint res = 0; if (r == 0) { res = mod_mul(inv1, mod_add(kn1n(8, k), mod_mul(mod_add(mod_mul(9, k), ainv(8)), fpow(8, k)))); } else if (r == 1) { res = mod_mul(inv2, mod_add(kn1n(5, k), mod_mul(mod_add(mod_mul(9, k), ainv(5)), fpow(8, k)))); } else { res = mod_mul(inv3, mod_add(kn1n(2, k), mod_mul(mod_add(mod_mul(9, k), ainv(2)), fpow(8, k)))); } printf("%lld\n", res); } return 0; }
本文作者:聆竹听风
本文链接:https://www.cnblogs.com/Bamboo-Wind/p/15028559.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步