T1
一眼树hash啊!
可我sb了,对一个集合进行hash显然用异或,我还赋权值求和。理论上是能找到一种赋值方式,但是不好找啊qwq
题解:
https://blog.csdn.net/a1035719430/article/details/81294044
T2:
考场写了30分
O((m−n)∗n+mlogm)
O
(
(
m
−
n
)
∗
n
+
m
l
o
g
m
)
后来失误覆盖了
qwq
q
w
q
题解:
https://blog.csdn.net/a1035719430/article/details/81294168
T3:
只会25分啊考场来不及写写了5分。
从最朴素的做法讲起
暴力就不讲了
fi,j,n
f
i
,
j
,
n
表示长度为
i
i
的数模余
j
j
,中每个数出现次数对3的余数状态为k,直接枚举转移拿15分。
这个转移写出来是很有规律的。矩阵乘法可以优化到20~25分
考虑每个数字转移的时候对状态的影响,实际上是每一位加加x再对3取模。可以使用
FFT
F
F
T
或广义异或或
FWT
F
W
T
优化
对于每个状态求答案数组,做
IFWT
I
F
W
T
每个k要做一次n的矩阵乘法
O(3|S|k3logn)
O
(
3
|
S
|
k
3
l
o
g
n
)
60分
继续优化
长度为
i1
i
1
,模
k
k
余的数后面接一个长度为
i2
i
2
,模
k
k
余的数,对
k
k
的余数是所以可以倍增优化合并。
对第一个向量做下表变换:
j1→10i2j1
j
1
→
10
i
2
j
1
mod
m
o
d
k
k
然后发现又是一个循环卷积!
倍增优化完是
最后再用一次NTT优化循环卷积优化到
O(|S|k
O
(
|
S
|
k
logk
l
o
g
k
logn)
l
o
g
n
)
其实并不会写,太弱了QAQ