AGC012C Tautonym Puzzle
考虑在 AAA 的前 100100100 位递增地填上 1→1001 \to 1001→100。
如果我们限制 AAA 的后 100100100 位里,1∼1001 \sim 1001∼100 每个数最多出现一次。后 100100100 位可以不填满。
那么 AAA 中好的子序列数量,就是后 100100100 位里严格上升子序列的数量。
问题转化成:构造一个序列 BBB:
构造方式如下:
枚举 xxx 从 1→1001 \to 1001→100,将 xxx 插入 BBB 中。
将 xxx 插入 BBB 的后侧,会让 BBB 的严格上升子序列数 ×2\times 2×2。
将 xxx 插入 BBB 的前侧,会让 BBB 的严格上升子序列数 +1+1+1。
将 NNN 二进制拆分即可。上面的 xxx 最多运行到 2logN2\log N2logN 就能构造成功了。
构造出来的 BBB 长度 2logN2\log N2logN,对应 AAA 的长度 100+2logN100 + 2\log N100+2logN。
如果最开始的时候只将这 2logN2\log N2logN 个数递增地放在 AAA 的最开始,可以做到串长 4logN4\log N4logN。
构造时间复杂度 Θ(logN)\Theta(\log N)Θ(logN)。
如果想要取得更大的随机数范围以保证正确性,可以使用 mt19937_64 生成伪随机数,胜率会更大一些偶
mt19937_64
orz
写超好👍
非常详细!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2020-05-15 咕咕咕通知