洛谷 P3396 哈希冲突
Problem
P3396 哈希冲突
Solution
本文摘自基础数据结构学习笔记
先想两种极端的做法
- 对于每个询问,暴力计算\(k,k+p,k+2\times p\dots\)的\(value\)之和。
- 预处理出\(ans[p][k]\)表示在\(\bmod p\)的意义下,余数为\(k\)的\(value\)之和。
第一种方法时间\(\rm O(n^2)\),空间\(\rm O(1)\);第二种方法时间\(\rm O(1)\),空间\(O(n^2)\)。
考虑根号分治。
对于\(p\le \sqrt n\),我们预处理,保存在数组\(ans[p][k]\)中。空间\(\rm O(\sqrt n\times\sqrt n)=\rm O(n)\),时间上预处理\(\rm O(n\sqrt n)\),修改\(\rm O(\sqrt n)\),查询\(\rm O(1)\).
对于\(p>\sqrt n\),我们不预处理,每一次询问暴力统计。每次统计的数量不会超过\(\dfrac np\le \sqrt n\).
\(\color{white}我做了那些Ynoi我都白做了啊啊啊,这么简单的一个根号分治我都想不出来……我太菜了……\color{gray}awa\)
Code
/**************************************************************
* Problem: 3396
* Author: Vanilla_chan
* Date: 20210402
* E-Mail: Vanilla_chan@outlook.com
**************************************************************/
#include
#include
#include
#include
#include
#include
#include