由于出题人是??,这里给出一个比 std (暴力)更好的做法。
首先需要知道 std 的愚蠢做法,直接暴力枚举后 check,达到了 \(O((n-m)^km^k)\),在原题能通过,但是对于某些会更强问题的同学很不公平,考虑加大数据范围。
我的赛时做法是 \(O(n^k)\) 地枚举一个匹配点后 \(O(n^{k-1})\) 枚举其它维,对第 \(k\) 维做哈希,做到 \(O(n^{2k-1})\) 的时间复杂度。这个做法的劣势在于得到匹配点后仍然需要十分暴力的 check,如果我们能不枚举那 \(k-1\) 维,而是求其哈希值,就能做到 \(O(n^k)\) 的时间复杂度。
考虑对其做高维哈希,需要快速支持查询操作。高维哈希是满足结合律的,考虑对其做 FMT。像高维前缀和一样,对所有维度做状压,预处理是 \(O(n^k)\) 的。查询是不太好做的,一个直接的想法是直接对其做 \(O(2^k)\) 的容斥,这样的时间复杂度为 \(O(n^k2^k)\),实现并不困难。
标签:更好,暴力,qbltd7t1,复杂度,枚举,哈希,做法,高维 From: https://www.cnblogs.com/BYR-KKK/p/18449938