标签:表示 开始 $1 复杂度 lin 有一个 矩阵乘法 有关 而不是
万年rk2
我写挂大家都挂但是有人比我挂的少
我好不容易卡一波常数然后有人ak
。。。
T1.不想写,等会放链接
T2
给一个方阵,每个地方有一个权值,把它划成两块,不能往回拐弯,求两块极差较大的那个极差最小值是多少
显然,二分极差
然后贪心的画一条线,保证它不拐弯就可以了
T3
你下了一个$10^{18}$攻的克苏恩,对面有一个无限血的英雄和一个奴隶主,求这个克苏恩期望打多少下脸
首先,只有7个格子,场面只跟奴隶主的血量有关(也没有火舌管站位干吗)
然后我们可以搜一发状态,发现只有165个
我们用$f_{i,s}$表示打了$i$下当前场面为$s$的期望打脸次数
$s$怎么处理呢?哈希一下咯
然后发现我们可以矩阵乘法,对于打脸的情况,另单开一行就可以了
当然要记得自己转移自己...
但这样还不够,复杂度$O(T \times 165^3 \times logn)$显然过不了
考虑到最后我们只需要矩阵的一行中的几个元素而不是整个矩阵,又想到向量乘矩阵是$O(n ^ 2)$的
我们可以预处理出转移矩阵的$2^t$次方,查询的时候相当于倍增,乘一次是$O(n ^ 2)$的
于是就是$O(165^3 \times logn + T \times 165^2 logn)$的
然而还是卡不过去,我们考虑优化取模,首先当然是要
inline void add(LL &x,LL delt){x += delt;if(x >= mod)x -= mod;}
其实这样加了O2我们已经可以过了
然而本机1.5s的我还是慌得一批
于是我们可以找一个很大的数,然后每次先膜这个大的,最后再膜998244353,$O(n^3)$次取膜变成了$O(n^2)$次的
现在问题出在怎么找这个数上,一开始想的是找一个很大的质数,后来发现完全没必要质数,找一个20位左右的数就可以了
这样就可以卡进1s了
标签:表示 开始 $1 复杂度 lin 有一个 矩阵乘法 有关 而不是
原文地址:https://www.cnblogs.com/Kong-Ruo/p/9682814.html