[CQOI2018]交错序列 \(solution:\) 这一题出得真的很好,将原本一道矩阵快速幂硬生生加入组合数的标签,还那么没有违和感,那么让人看不出来.所以做这道题必须先知道(矩阵快速幂及如何构建递推矩阵)(组合数及二项式定理). 不知道大家有没有做过洛谷的帕秋莉手环及P哥的桶,这道题中不能有相邻的两个1就是我们在构造这个交错序列时不能连续加入两个1,这个如果直接让我们求方案数(不靠虑一的个数)就是矩阵快速幂的板子了(可以自己推递推方程).但是这1题偏偏把1的个数搭上了,我们发现1的个数是…
  (Another) YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into the enemy's base. After overcoming a series difficulties, (Another) YYF is now at the start of enemy's famous "mine road". This is a very long road…
题目 最早不会写,看了网上的分析,然后终于想明白了矩阵是怎么出来的了,哈哈哈哈. 因为边上的项目排列顺序不一样,所以写出来的矩阵形式也可能不一样,但是都是可以的 //愚钝的我不会写这题,然后百度了,照着大神的题解,有了如下的东东: //根据ff, mm, fm, mf ,先列出所有可能的组合方式(1表示连在一次,具体判断方式自己看看就知道了) // ff mm fm mf //ff 1 0 1 0 //mm 0 1 0 1 //fm 0 1 0 1 //mf 1 0 1 0 //题目中说不能有f…
Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec Problem Description Input The input contains a single line consisting of 2 integers N and M (1≤N≤10^18, 2≤M≤100). Output Print one integer, the total n…
考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i位走到AC自动机上j节点的概率,枚举下个字符即可转移.同时记录此时期望伤害,找到合法串就统计入答案. 并且注意到每次转移是相同的.矩阵快速幂优化即可. 以及非常卡精度,需要全程long double.cout的保留小数位数误差是相当大的,必须用printf.并且转移到某个字符的概率即1/alphab…
显然答案为Σkb·(n-k)a·C(n-k+1,k).并且可以发现ΣC(n-k,k)=fibn.但这实际上没有任何卵用. 纯组合看起来不太行得通,换个思路,考虑一个显然的dp,即设f[i][j][0/1]为前i为选了j个1其中第i位是0/1的方案数.这样当然能求出答案,复杂度O(n2). 注意到ab很小,并且事实上我们并不需要知道所有的方案数,而是只要求出贡献就可以了.而又有xayb=xa(n-x)b,这个式子显然只要求出所有Σxi就能求了.再由二项式定理,(k+1)b=ΣC(b,i)ki.那么…
https://blog.csdn.net/dream_maker_yk/article/details/80377490 斯特林数有时并没有用. #include<cstdio> #include<cstring> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) typedef long long ll; using namespace std; ; int n,a,b,mo…
设f[i][j]为第i天到达j号城市的方案数,转移显然,答案即为每天在每个点的方案数之和.矩乘一发即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long #define N 33 #de…
[BZOJ5298][CQOI2018]交错序列(动态规划,矩阵快速幂) 题面 BZOJ 洛谷 题解 考虑由\(x\)个\(1\)和\(y\)个\(0\)组成的合法串的个数. 显然就是把\(1\)当做隔板插入进去,那么有\(y+1\)个位置可以放\(1\),所以方案数就是\({y+1\choose x}\). 而\(x^ay^b\)的贡献可以直接快速幂算,所以问题变成了求组合数.然后\(Lucas\)一下就可以得到\(TLE\)的好成绩了.复杂度\(O(nlogn)\)(事实上只要有快速幂就会\…
BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻的0).例如,000,001 ,101,都是交错序列,而110则不是.对于一个长度为n的交错序列,统计其中0和1出现的次数,分别记为x和y. 给定参数a.b,定义一个交错序列的特征值为x^ay^b.注意这里规定任何整数的0次幂都等于1(包括0^0=1). 显然长度为n的交错序列可能有多个.我们想要知道,所有长…
[BZOJ2004]公交线路(动态规划,状态压缩,矩阵快速幂) 题面 BZOJ 题解 看到\(k,p\)这么小 不难想到状态压缩 看到\(n\)这么大,不难想到矩阵快速幂 那么,我们来考虑朴素的\(dp\) 设\(f[i][j]\)表示当前位置为\(i\),前面的\(P\)个位置的状态为\(j\) 其中,状态的含义是某个公交线路最后的停靠站 如果是最后的停靠站就是\(1\),否则是\(0\) 那么,任意状态中只存在\(k\)个\(1\) 并且表示\(i\)的二进制位一定是\(1\) 所以状态相当…
[BZOJ1009]GT考试(KMP算法,矩阵快速幂,动态规划) 题面 BZOJ 题解 看到这个题目 化简一下题意 长度为\(n\)的,由\(0-9\)组成的字符串中 不含串\(s\)的串的数量有几个 很显然,如果组成的字符串和\(s\)串做\(KMP\)的匹配的话 是不能匹配到最后一位的 所以,我们想到一个很显然的方程 \(f[i][j]\)表示当前做了第\(i\)位,在\(s\)串中匹配到了第\(j\)位 每次枚举下一位放的数字 以及每一位的位置 相当于做\(KMP\)的匹配 然后进行转移…
[BZOJ4000][TJOI2015]棋盘(矩阵快速幂,动态规划) 题面 BZOJ 洛谷 题解 发现所有的东西都是从\(0\)开始编号的,所以状压只需要压一行就行了. 然后就可以随意矩乘了. #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define uint unsigned int inline int read() { int x=0;bool t=fals…
[CF1151F]Sonya and Informatics(动态规划,矩阵快速幂) 题面 CF 题解 考虑一个暴力\(dp\).假设有\(m\)个\(0\),\(n-m\)个\(1\).设\(f[i][j]\)表示当前做到了第\(i\)个操作,前\(m\)个元素中有\(j\)个\(1\)的方案数. 转移就枚举交换哪两个东西就可以了. 把转移用矩阵优化就可以做到\(O(n^3logK)\). #include<iostream> #include<cstdio> #include&…
[BZOJ4832]抵制克苏恩(矩阵快速幂,动态规划) 题面 BZOJ 题解 一模一样 #include<iostream> #include<cstdio> using namespace std; inline int read() { int x=0;bool t=false;char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=true,ch=g…
[UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\)次攻击,还剩下的\(1,2,3\)血的奴隶主个数为\(a,b,c\)的概率,每次考虑打到了哪里,做一个转移. 这样子,状态数就是把不超过\(8\)个东西分配到\(3\)个集合中,状态有\(165\)种,再加一个状态记录糊脸上的期望,也就是\(166\)个状态. 直接矩乘优化,那么单次的复杂度就是\(…
[BZOJ1898][ZJOI2005]沼泽鳄鱼(矩阵快速幂,动态规划) 题面 BZOJ 洛谷 题解 先吐槽,说好了的鳄鱼呢,题面里面全是食人鱼 看到数据范围一眼想到矩乘. 先不考虑食人鱼的问题,直接设\(f[i][j]\)表示\(j\)时刻到达了\(i\)号节点的方案数,转移显然. 接下来考虑食人鱼的影响,显然是在模\(2,3,4\)的意义下,某个特定余数时刻某个点不能到达,而\(lcm(2,3,4)=12\),所以显然以\(12\)为周期,构建\(12\)个矩阵,每次一起乘就好了.多出来的部…
[BZOJ4870]组合数问题(动态规划,矩阵快速幂) 题面 BZOJ 洛谷 题解 显然直接算是没法做的.但是要求的东西的和就是从\(nk\)个物品中选出模\(k\)意义下恰好\(r\)个物品的方案数.\(n\)的范围这么大,往快速幂的方面靠.设\(f[i][j]\)表示从前\(i\)个物品中选了模\(k\)意义下\(j\)个物品的方案数,转移显然,快速幂即可. 时间复杂度\(O(k^3logn)\). 稍微注意一个细节,\(k=1\)的时候,矩阵的唯一一项不是\(1\),而是\(2\).所以在…
[BZOJ1494][NOI2007]生成树计数(动态规划,矩阵快速幂) 题面 Description 最近,小栋在无向连通图的生成树个数计算方面有了惊人的进展,他发现: ·n个结点的环的生成树个数为n. ·n个结点的完全图的生成树个数为n^(n-2).这两个发现让小栋欣喜若狂,由此更加坚定了他继续计算生成树个数的 想法,他要计算出各种各样图的生成树数目.一天,小栋和同学聚会,大家围坐在一张大圆桌周围.小栋看了看, 马上想到了生成树问题.如果把每个同学看成一个结点,邻座(结点间距离为1)的同学间…
CF954F Runner's Problem(动态规划,矩阵快速幂) 题面 CodeForces 翻译: 有一个\(3\times M\)的田野 一开始你在\((1,2)\)位置 如果你在\((i,j)\)位置 在不出界的前提下,可以走到\((i+1,j),(i+1,j±1)\) 有\(n\)段障碍,障碍不能走 询问从\((1,2)\)到达\((M,2)\)的方案数 \(n<=10^4,M<=10^{18}\) 题解 发现\(M\)的范围非常大 很容易往矩阵快速幂的方向考虑 如果知道上一行的…
https://leetcode.com/problems/knight-dialer/ 在如下图的拨号键盘上,初始在键盘中任意位置,按照国际象棋中骑士(中国象棋中马)的走法走N-1步,能拨出多少种不同的号码. 解法一:动态规划,逆向搜索 class Solution { public: vector<vector<,},{,},{,},{,},{,,}, {},{,,},{,},{,},{,}}; ; int knightDialer(int N) { ; ; i<=; i++) {…
这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你一个 n 行m 列 的格子图 一只马从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行. 题意很简单暴力dp的思路也很简单但是数据很恶心虽然远古一点,但毕竟是省选题 1 ≤ n ≤ 50,2 ≤ m ≤ 10^9 不过还是给了我们一点提示:n这么小? 总之我们先找出转移式对于每一个点…
题意:给出一个字符集和一个字符串和正整数n,问由给定字符集组成的所有长度为n的串中不以给定字符串为连续子串的有多少个? 析:n 实在是太大了,如果小的话,就可以用动态规划做了,所以只能用矩阵快速幂来做了,dp[i][j] 表示匹配完 i 到匹配 j 个有多少种方案,利用矩阵的性质,就可以快速求出长度为 n 的个数,对于匹配的转移,正好可以用KMP的失配函数来转移. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000")…
Problem J. Wiki with 35Input file: standard input Time limit: 1 secondOutput file: standard output Memory limit: 256 megabytes从前,有一对夫妻生了五胞胎,这对夫妻为了让这五兄弟比较容易让老师记得,分别给他们取名"1"."3". "5". "7". "9".而"3"…
题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Google Codejam Round 1A的C题. #include <bits/stdc++.h> typedef long long ll; const int N = 5; int a, b, n, mod; /* *矩阵快速幂处理线性递推关系f(n)=a1f(n-1)+a2f(n-2)+.…
非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模)   Input 一个数n,表示长度.(n<1e15) Output 长度为n的非010串的个数.(对1e9+7取模) Input示例 3 Output示例 7 解释: 000 001 011 100 101 110 111 读完题,这样的题目肯定是能找到规律所在的,要不然数据太大根本无法算.假设现在…
题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; ; ; int n, m; struct Mat{//矩阵 ll mat[N][N]; }; Mat operator * (Mat a, Mat b){//一次矩阵乘法…
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. 在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论起了二叉搜索树.什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树.设key[p]表示结点p上的数值.对于其中的每个结点p,若其存在左孩子lch,则key…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2) = b,求f(n) 思路:对矩阵快速幂的了解仅仅停留在fib上,重现赛自己随便乱推还一直算错,快两个小时才a还wa了好几次.... 主要就是构造矩阵:(n+1)^4 = n^4 + 4n^3 + 6n^2 + 4n + 1 |1   2   1   4   6   4   1|     |  …
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输入3个数:A,B,N.数字之间用空格分割.(-10000 <= A, B <= 10000, 1 <= N <= 10^9) Output 输出f(n)的值. Input示例 3 -1 5 Output示例 6题意:f(n) = (A * f(n - 1) + B * f(n - 2)…