矩阵
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
bzoj1009 [HNOI2008]GT考试(KMP+DP+矩阵倍增)
f[i][j]表示前i位准考证号,匹配到了不吉利串第j位。我们考虑如何将f[i][j]转移到f[i+1][j].首先用kmp处理出fail数组,假设现在在做前i位匹配到了第j位,那么对于i+1位可能出现的每个字符我们都从j开始匹配,看能转移到哪里去。就是这样: f[0][0]=1; for(int i=0;i<=n;i++){ for(int j=0;j<m;j++){ for(i原创 2017-07-23 21:58:51 · 404 阅读 · 0 评论 -
bzoj1444 [Jsoi2009]有趣的游戏(ACAM+矩阵+概率dp)
给定n个长度为l的模式串,现在要用前m个大写字母生成一个随机串,每个字符有自己的出现几率,第一次出现的字符串获胜,求最终每个字符串的获胜几率建出ACAM,搞出Trie图,弄出转移矩阵: 如果某个节点是模式串结尾那么这个节点只向自己连一条概率为1的出边(因为只要一走到结尾节点游戏就停止了)否则的话向每个转移到的节点,加上转移的概率。然后把转移矩阵自乘50遍即可。吐槽:这题假的假的【再见】,我写矩阵倍原创 2018-03-23 21:09:00 · 542 阅读 · 1 评论 -
bzoj3113/hdu2481 Toy(矩阵树定理+polya+矩阵快速幂)
这神题,真是给跪了orz 首先你需要做过bzoj1002,我们得到了一个递推式f[n]=3f[n−1]−f[n−2]+2f[n]=3f[n-1]-f[n-2]+2,用来算n个点的方案数。 然后这题旋转同构,你需要polya,因为n很大,所以要欧拉函数优化,所以答案就是∑i|nϕ(i)f[n/i]\sum\limits_{i|n}\phi(i)f[n/i]。你需要O(n√)O(\sqrt n)枚举原创 2018-03-30 15:33:36 · 383 阅读 · 0 评论 -
poj2888 Magic Bracelet(burnside引理+矩阵快速幂+欧拉函数)
用m种颜色给n个点的一个环染色,有一些限制条件,表示颜色a和颜色b不能相邻,考虑旋转同构,求方案数。(m<=10,n<=1e9) n很大,只能O(n−√)O(\sqrt n)枚举循环节个数k,枚举素数计算欧拉函数。因为颜色的限制,我们现在的问题在于要计算:给定一些颜色不能相邻,把k个位置染色的方案数。(这里准确的说,不仅仅是给k个位置染色,还要保证头尾颜色也要合法),因此其实就是求从颜色i走K步回原创 2018-03-27 18:31:53 · 449 阅读 · 0 评论 -
bzoj4000 [TJOI2015]棋盘(状压dp+矩阵快速幂)
题目中的标号都是从0开始的!所以攻击模板中你的位置为中间那一行!所以可以只考虑相邻两行的转移!先处理出f[s1][s2]表示相邻两行状态为s1,s2是否可行。 然后n很大,所以我们要矩阵加速。 复杂度O((2m)3logn)原创 2018-04-02 20:40:17 · 297 阅读 · 0 评论 -
bzoj3168 [Heoi2013]钙铁锌硒维生素(矩阵求逆+匈牙利)
如果把ai替换成bj,这n个向量还是线性无关即可以。 我们求一个C∗A=B,=>C=B∗A−1C∗A=B,=>C=B∗A−1C*A=B,=>C=B*A^{-1} 矩阵求逆可以高斯消元来做,注意他原本的A矩阵也不一定就线性无关qaq 如果Cij!=0Cij!=0C_{ij}!=0,说明bj可以替换ai。因此CTCTC^T就是这张二分图的邻接矩阵。然后我们就要求一个字典序最小的完...原创 2018-05-18 22:37:51 · 288 阅读 · 0 评论 -
bzoj4128 Matrix(BSGS+高斯消元,矩阵求逆+Hash表)
BSGS,只不过变成了矩阵。 学习了一下矩阵求逆,用高斯消元来做即可。O(n3)O(n^3) 还是把系数矩阵放左面,右边的常数向量变成了一个单位矩阵。高斯消元即可,最后左边变成了一个单位矩阵,右边就是我们的逆矩阵。原创 2018-04-28 20:20:01 · 260 阅读 · 0 评论 -
bzoj3640 JC的小苹果(期望dp+Gauss+矩阵求逆)
我们有比较显然的期望dp,f[x][i]表示到x点血量为i的期望次数。 我们有转移f[x][i]=∑yf[y][i+w[x]]du[y]f[x][i]=∑yf[y][i+w[x]]du[y]f[x][i]=\sum_y\frac{f[y][i+w[x]]}{du[y]} 直接高斯消元复杂度O((nhp)3)O((nhp)3)O((nhp)^3)gg 由于血量不增,因此我们可以按剩余血量分层d...原创 2018-05-25 23:10:21 · 321 阅读 · 0 评论 -
bzoj4037 [HAOI2015]数字串拆分(矩阵快速幂+dp)
对于计算f[n],我们显然可以构造出m*m的转移矩阵A来矩阵快速幂求。 然后我们考虑最后的答案,如果是分成了k个数:a1,a2,…,ak。 那么结果就是Aa1+a2+...+ak=Aa1∗Aa2∗...∗AakAa1+a2+...+ak=Aa1∗Aa2∗...∗AakA^{a_1+a_2+...+a_k}=A^{a_1}*A^{a_2}*...*A^{a_k} 最后的答案就是若干个这种矩阵加...原创 2018-06-11 21:53:22 · 380 阅读 · 0 评论 -
Wannafly挑战赛18
https://www.nowcoder.com/acm/contest/129#question A.序列(组合数学) -2和0.5一样多,且都为偶数,枚举一下具体个数就好了 O(n)O(n)O(n) 考时ZZ了,不会跳了过去…很久以后才A掉gg B.随机数(矩阵快速幂) 设f[i]表示前i个数有奇数个1的概率,则 f[i+1]=f[i]∗(1−p)+(1−f[i])∗pf[i+1...原创 2018-06-22 23:09:24 · 306 阅读 · 0 评论 -
poj2778 DNA Sequence (ACAM+dp+矩阵倍增)
求不包含模式串的文本串个数,n极大。我们还是类似的建出ACAM,然后在上面跑dp,只不过这次我们要矩阵倍增来加速。复杂度O((m∗len)3logn)O((m*len)^3logn)原创 2018-03-22 21:56:59 · 185 阅读 · 0 评论 -
bzoj1494 生成树计数(状压dp+生成树+矩阵倍增)
看数据,k<=5,n<=1e15,n极大,显然只能矩阵倍增去算。考虑dp,k极小,每个点最多能和前k个点连边,因此我们需要知道前k个点的联通情况,采用状压dp,用最小表示法。 我们可以先用一个DFS预处理出所有可能出现的连通性的状态。然后再枚举连通性状态S以及下一个点和S里的K个点中的哪些点连边,再判断从连通性状态S转移出来的新状态S′是否是合法的,若合法,在邻接矩阵里,标记从S到S′的方案数加1原创 2017-10-12 22:37:48 · 589 阅读 · 0 评论 -
bzoj4887 [Tjoi2017]可乐(dp+矩阵倍增)
f[0][i][t]表示第t秒到i的全部方案(含之前已经在i炸掉的)f[1][i][t]表示第t秒到i而且还在i没炸的方案数,则 f[0][i][t]=f[0][i][t-1]+f[1][j][t-1]+f[1][j][t-1]|i,j之间有边 f[1][i][t]=f[1][j][t-1]+f[1][i][t-1]|i,j之间有边 t=10^9,需要矩阵倍增加速。#include <cstd原创 2017-08-17 14:31:08 · 864 阅读 · 0 评论 -
poj3070 Fibonacci(矩阵倍增模板)
矩阵倍增模板题。从此开始我们的矩阵倍增之旅! 题解什么的题目说得很清楚了。。就是求一个矩阵的k次幂,和普通的快速幂是一样滴,只不过再多写一个矩阵乘法。矩阵倍增一般用来加速dp的转移,后面的题会见到。原创 2017-08-10 22:15:35 · 257 阅读 · 0 评论 -
vijos1049 送给圣诞夜的礼品(矩阵倍增)
用01矩阵模拟位置的交换,m个操作为一组,倍增(k/m)次。remain的(k%m)次,单独做,最后乘起来。原创 2017-08-10 23:00:19 · 370 阅读 · 0 评论 -
vijos1067 Warcraft III 守望者的烦恼(矩阵倍增)
f[i]=f[i-1]+f[i-2]+…+f[i-k].根据递推式构造出转移矩阵trans,trans.mat[1][n]表示f[i]。初始时f[0]=1.这便是矩阵倍增的真正用处了。。。原创 2017-08-10 23:27:09 · 796 阅读 · 0 评论 -
poj3233 Matrix Power Series (二分+矩阵+快速幂)
首先A^k我们可以通过快速幂求得,但是我们不能每一项都去算快速幂,这样还是会超时的。我们发现可以通过二分优化。 如果k为偶数,那么 (A+A2+....AK)=(A+...+Ak2)+Ak2∗(A+...+Ak2)(A+A^2+....A^K) = (A+...+A^{k\over 2})+A^{k\over 2}*(A+...+A^{k\over 2}) 如果k为奇数,那么 (A+A2+.原创 2017-08-10 23:29:35 · 380 阅读 · 0 评论 -
bzoj4870 [Shoi2017]组合数问题(dp+矩阵倍增)
翻译一下题目:实际上就是要我们从nk件物品里面选出若干件,使得其数量模k等于r的方案数。f[i][j]表示前i件物品拿了若干件使得其数量模k等于j的方案数。显然有dp方程:f[i][j]=f[i-1][j]+f[i-1][j-1]。初始值:f[0][0]=1.用矩阵快速幂加速一下就好啦。时间复杂度为O(lognk∗k3)O(lognk*k^3)原创 2017-08-10 23:30:24 · 507 阅读 · 0 评论 -
hdu2604 queuing(dp+矩阵倍增)
f[i]表示i个人排队时为E-queue的方案数。则有:f[n]=f[n-1]+f[n-3]+f[n-4] 解释一下:第n个人为m时,前n-1个只要合法就行,所以是f[n-1]. 第n个人为f时,前n-1个人合法不能保证这n个都合法,我们再看第n-1位,第n-1位为m时,第n-2为显然只能是m,这样的话只要保证前n-3个合法即可,所以是f[n-3]。第n-1位为f时,第n-2为显然只能是m,第n原创 2017-08-10 23:30:57 · 468 阅读 · 0 评论 -
bzoj2875 [noi2012]随机数生成器(矩阵倍增)
挺裸的矩阵倍增。。。就是再处理一下ll*ll.思想类似快速幂,例如对x*y,把x变成二进制,y去倍增,每次都mod m,变乘法为许多次加法,保证不会溢出。原创 2017-08-10 23:31:37 · 439 阅读 · 0 评论 -
NOIP模拟9.23(TYVJ NOIP2017模拟赛D1)
T1 回形遍历T2 排列T3 近似排列计数原创 2017-09-27 11:23:40 · 710 阅读 · 0 评论 -
CF750E New Year and Old Subsequence(dp+线段树分治+矩阵)
我们考虑5种状态的矩阵: 0–什么都没出现 1–出现了2 2–出现了20 3–出现了201 4–出现了2017 重定义 加法为取min,乘法为 加,每个点根据字符可以得到一个初始矩阵 那么答案就是l~r的矩阵的乘积。因为矩阵乘法满足结合律,因此我们可以用线段树分治来快速求区间矩阵乘积。 复杂度O((n+m)logn52)O((n+m)logn52)O((n+m)logn 5^2)...原创 2018-06-17 23:57:16 · 1047 阅读 · 0 评论