2018.7.30比赛

T1

一眼树hash啊!
可我sb了,对一个集合进行hash显然用异或,我还赋权值求和。理论上是能找到一种赋值方式,但是不好找啊qwq

题解:
https://blog.csdn.net/a1035719430/article/details/81294044


T2:

考场写了30分 O((mn)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 的数模k j j S中每个数出现次数对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 j1的数后面接一个长度为 i2 i 2 ,模 k k j2的数,对 k k 的余数是(10i2j1+j2)modk1所以可以倍增优化合并。
对第一个向量做下表变换: j110i2j1 j 1 → 10 i 2 j 1 mod m o d k k
然后发现又是一个循环卷积!
倍增优化完是O(3|S|k2logn)
最后再用一次NTT优化循环卷积优化到 O(|S|k O ( | S | k logk l o g k logn) l o g n )

其实并不会写,太弱了QAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值