【题解】P11270 【MX-S5-T4】魔法少女们
https://www.luogu.com.cn/problem/P11270
考虑根号分治:
- \(|S|\le B,|T|\le B\):
若 \(k\ge 2B\),可以让串长 \(<B\) 的先走到 \(|S|=|T|=B\),然后枚举 \(B^2\) 个点对,使用反射容斥计算方案数。
若 \(k<2B\),可能有串会重叠。但是这时候只有 \(O(B)\) 个长度,直接暴力枚举 \(|S|,|T|\),维护重叠部分的哈希值,我们要求的是两个桶的交。每个串会被处理 \(O(B)\) 次,故可以适当将 \(B\) 开小。 - \(|S|>B,|T|>B\):
只有 \(O((\frac{\Sigma |S|}{B})^2)\) 个串,暴力枚举计算。
重叠就用哈希判定,没有重叠就是反射容斥。 - \(|S|>B,|T|\le B\):
对于没有重叠的,也是和第一类一样让 \(T\) 走到 \(|T|=B\),然后枚举 \(B\) 个点计算方案,复杂度 \(O(\frac{\Sigma |S|}{B}\times B)\)。
对于有重叠的,枚举 \(|T|\),重叠部分求出哈希,查询桶里面对应 \(T\) 的数量。
总复杂度 \(O((\frac{\Sigma |S|}{B})^2+nB+B^2)\),平衡得到 \(B=790\)。
浙公网安备 33010602011771号