2022.7.19 闲话
约定:
- .
- 是值域 .
2-SUM Counting
给一个序列 和一个正整数 ,问有多少对 ()使得 ,对 取模 .
Algorithm 1 暴力 .
Algorithm 2 开一个桶,算出 ,于是答案是
注意到是卷积形式,可以 NTT 解决 .
Algorithm 3 开一个 Hash Table,把所有 存进去,扫一遍在 Hash Table 里查询 即可,最优 .
2-SUM Finding
给一个序列 和一个正整数 ,找一对 使得 .
Algorithm 1 暴力 .
Algorithm 2 开一个 Hash Table,把所有 存进去,扫一遍在 Hash Table 里查询 即可,最优 .
更高的 SUM 问题仍可以 Hash Table 解决 .
3-SUM Multi-Counting
给一个序列 ,对于每个 ,问有多少对 ()使得 ,对 取模 .
令 ,于是答案是
三元卷积非常牛逼哈,但是我们仔细观察就可以发现这个是可以拆成两次普通卷积的 .
多组询问非常平凡,具体的,令 ,则对于一个 ,答案为 .
两次 NTT, .
更高的 SUM Counting 也可以这么解决 .
2D - 2-SUM Multi-Counting (Weak)
给两个序列 ,多组询问,每次给一个 ,问有多少对 ()使得 ,对 取模 .
开一个 Hash Table,每次存一个 pair .
在值域上枚举 ,在 Hash Table 里查 即可 .
时间复杂度最优 .
2D - 2-SUM Multi-Counting
给两个序列 ,多组询问,每次给一对 ,问有多少对 ()使得 且 ,对 取模 .
严格强于今天模拟赛 T3(Common).
做法也是卷积,大概有两种 .
Algorithm 1
考虑把两个数压成一个数 .
首先定义 , 比值域大一点 .
令 ,构造多项式:
于是 即为答案, NTT 即可 .
Algorithm 2
令 .
于是构造二元多项式:
考察其卷积,可以发现两维分别卷积了 .
于是答案就是 (我也不知道这个二元的提取系数是不是这么写)
于是上一个 2D 的 NTT(具体的,先对每列做 DFT,再对每行做 DFT,然后点乘,然后对每行做 IDFT,最后对每列做 IDFT),就可以维护出 了 .
类似的可以扩展到 D .
这样:D - -SUM (Multi-)Counting 被解决 .
Finding 大概都可以 Hash 吧,口胡的没仔细想……
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16495528.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】