洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 299  Solved: 207 Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆.它每一秒都会随机触发一种行为.现在给出加里敦星球城市图,在第0秒时可 乐机器人在1号城市,问经过了t秒,可乐机器人的行为方案数是多少?  …
Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆.它每一秒都会随机触发一种行为.现在给出加里敦星球城市图,在第0秒时可 乐机器人在1号城市,问经过了t秒,可乐机器人的行为方案数是多少?   Input 第一行输入两个正整数N,M表示城市个数,M表示道路个数.(1≤N≤30,0≤M≤100) 接下来M行输入u,v表示u,v之间有一条道路. (1≤u,…
作为一个因为极度畏惧数学 而选择成为一名OIer的蒟蒻 终于还是迎来了要面对的这一天 一般题目中矩阵运算好像只用到矩阵乘法 (或许只是蒟蒻我做的题太少) 而且矩阵的乘法也是较难理解的一部分 所以就简单讲讲矩阵乘法 如图 矩阵A*B就是用A的每一行依次乘B的每一列 具体就是A的第i行中每一个数对应相乘B的第j列每个数 每个相乘所得结果相加 最后放置于C矩阵的第i行第j号位 所以矩阵乘法中A的列数必须等于B的行数 (虽然第一次看确实有些绕,但它用起来真的妙啊~妙啊~) 上一个矩阵A*B的代码 (这里…
给定n*n的矩阵A,求A^k 行列都是n #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; ,MOD=; typedef long long ll; inline ll read(){ ,f=; ;c=getchar();} +c-';c=getchar();} re…
这题的确是个模板 但也要提到有关矩乘的内容: 首先什么是矩阵? 给一个线性变换 F(x)   (她可能就是个函数,定义域为向量集) 她可以把一个N维向量变成M维 那么显然x的每一维都可能影响着F(x)的每一维,于是F(x)这个线性变换就应该是N*M个在每两维间的小映射构成的. 于是我们可以把她写成M行N列的矩阵(M行N列是出于习惯) 所以矩阵是用于形象的表示线性变换的工具: 所以怎么合乎习惯的构造矩阵呢? 举例说明: 如,有一个三元组(3维向量)x{a,b,c} 定义F(x)={a+b,b+c}…
模板题 留个档 #include <cstdio> #include <algorithm> #include <cstring> #define int long long using namespace std; ; int n,k; struct Matrix{ ; int n,m; int alpha[MAXN][MAXN]; void init2(void){ ;i<MAXN;i++) ;j<MAXN;j++) alpha[i][j]=; n=m=…
Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆.它每一秒都会随机触发一种行为.现在给出加里敦星球城市图,在第0秒时可 乐机器人在1号城市,问经过了t秒,可乐机器人的行为方案数是多少? Input 第一行输入两个正整数N,M表示城市个数,M表示道路个数.(1≤N≤30,0≤M≤100) 接下来M行输入u,v表示u,v之间有一条道路. (1≤u,v≤…
题目 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k ,n ,m,每两个整数之间用一个空格隔开. 输出格式: 输出共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果. 输入输出样例 输入样例#1: 1 1 3 1 2 输出样例#1: 3 说明 数据范围 对于30% 的数据,有 0 ≤k ≤10 : 对于50%…
这道题太精彩了! 我一开始想直接一波暴力算,然后叫上去只有50分,50分超时 然后我改成万位制提高运算效率,还是只有50分 然后我丧心病狂开long long用10的10次方作为一位,也就是100亿进制 去做,然后交上去多过了一个点,60分 附上丧心病狂的代码 #include<cstdio> #include<cctype> #include<algorithm> #define REP(i, a, b) for(int i = (a); i < (b); i+…
有两个问题:求位数和求后500位的数. 求位数:最后减去1对答案的位数是不影响的,就是求2p的位数,直接有公式log10(2)*p+1; 求后500位的数:容易想到快速幂和高精度: 1 #include<bits/stdc++.h> 2 using namespace std; 3 int p,f[1001],/*基数*/res[1001],/*记录答案*/sav[1001]/*中间数组*/; 4 5 void work_1(){//记录答案 6 memset(sav,0,sizeof(sav…
题意 题目链接 Sol \(B(x) = \exp(K\ln(A(x)))\) 做完了... 复杂度\(O(n\log n)\) // luogu-judger-enable-o2 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define Pair pair<int, int> #define MP(x, y) make_pair(x, y) #define fi first #define se second #defin…
题面 传送门 题解 话说现在还用数组写多项式的似乎没几个了-- \[B(x)=A^k(x)\] \[\ln B(x)=k\ln A(x)\] 求个\(\ln\),乘个\(k\),\(\exp\)回去就行了 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R int i=(a),I=(b…
[BZOJ4887][TJOI2017]可乐(矩阵快速幂) 题面 BZOJ 洛谷 题解 模板题??? #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define MAX 35 #define MOD 2017 inline int read() { int x=0;bool t=false;char ch=getchar(); while((ch<'0'||c…
[bzoj4887]:[Tjoi2017]可乐 题目大意:一张无相连通图(n<=30),从1号点开始走,每秒可以走到相邻的点也可以自爆,求第t秒(t<=1e6)后所有的方案数是多少对2017取模 恩..就是一个矩阵快速幂..矩阵就是原图的邻接矩阵..然后f[i][i]也是1.. 但是这是不会自爆的情况下的矩阵,算上自爆的话要把每次转移的结果求和..蒟蒻想了半天.. 然后发现其实只要再加一行一列,然后f[n+1][i]=1,就可以了.. 意会一下好了..矩阵什么的感觉讲不清楚啊.. /* htt…
Portal Description 给出一张\(n(n\leq30)\)个点\(m(m\leq100)\)条边的无向图.初始时有一个可乐机器人在点\(1\),这个机器人每秒会做出以下三种行为之一:原地不动,走向相邻点,自爆(自爆后就不能动了).求经过\(t(t\leq10^6)\)秒后可乐机器人的行动方案数. Solution 矩阵乘法优化DP. 首先改一下原图:每个点向自己连一条自环:建立一个点\(n+1\)表示自爆,其余每个点向\(n+1\)连一条有向边.然后原问题就简化成了在一个有向图上…
P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站A到公交站D,你就至少需要换3次车. Tiger的方向感极其糟糕,我们知道从公交站A到公交E只需要换4次车就可以到达,可是tiger却总共换了n次车,注意tiger一旦到达公交站E,他不会愚蠢到再去换车.现在希望你计算一下tiger有多少种可能的乘车方案. 题…
题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机触发一种行为.现 在给加里敦星球城市图,在第0秒时可乐机器人在1号城市,问经过了t秒,可乐机器人的行为方案数是多少? 输入输出格式 输入格式: 第一行输入两个正整数况N,M,N表示城市个数,M表示道路个数.(1 <= N <=30,0 < M < 100) 接下来M行输入u,v,表示u…
题目链接 让我们先来思考一个问题,在一张包含$n$个点的图上,如何求走两步后从任意一点$i$到任意一点$j$的方案数. 我们用$F_p(i,j)$来表示走$p$步后从$i$到$j$的方案数,如果存储原图信息的是一个邻接矩阵$G$,那么显然就有: $F_1(i,j)=G(i,j)$ $F_2(i,j)=\sum_{k=1}^n G(i,k) \times G(k,j)$ $F_2$的计算式子是不是十分眼熟,这不就是矩阵乘法嘛!那么就有$F_2=G^2$了. 让我们继续看下去: $F_3(i,j)=…
题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k 共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7 输入输出样例 输入样例#1: 复制 2 1 1 1 1 1 输出样例#1: 复制 1 1 1 1 说明 n<=100, k<=10^12, |矩阵元素|<=1000 算法:矩阵快速幂 ----------…
P3390 [模板]矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 矩阵A的大小为n×m,B的大小为n×k,设C=A×B 则\(C_{i,j}=\sum\limits_{k=1}^{n}A_{i,p}×B_{p,j}\) 矩阵乘满足结合律:(AB)C=A(BC) 有一种特殊的矩阵:单位矩阵,它从左上角到右下角的对角线上的元素均为1,除此以外全都为0.它在矩阵乘中相当于数乘中的1,即任何矩阵乘它都等于本身. code: #include <iostream> #include <cst…
矩阵快速幂 题目描述 矩阵乘法: A[n*m]*B[m*k]=C[n*k]; C[i][j]=sum(A[i][1~n]+B[1~n][j]) 为了便于赋值和定义,我们定义一个结构体储存矩阵: struct Matrix{ ][]; }; X*Y: Matrix cheng(Matrix X,Matrix Y) { Matrix C; ;i<=n;i++) ;j<=n;j++) { C.m[i][j]=; ;l<=n;l++) C.m[i][j]=(C.m[i][j]+X.m[i][l]…
P1349 广义斐波那契数列 https://www.luogu.org/problemnew/show/P1349 题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an除以m的余数. 输入输出格式 输入格式: 输入包含一行6个整数.依次是p,q,a1,a2,n,m,其中在p,q,a1,a2整数范围内,n和m在长整数范围内. 输出格式: 输出包含一行一个整数,即an除以m的余…
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请你求出 f(n) mod 1000000007 的值. 输入输出格式 输入格式: ·第 1 行:一个整数 n 输出格式: 第 1 行: f(n) mod 1000000007 的值 输入输出样例 输入样例#1: 复制 5 输出样例#1: 复制 5 输入样例#2: 复制 10 输出样例#2: 复制 5…
P1306 斐波那契公约数:https://www.luogu.org/problemnew/show/P1306 这道题目就是求第n项和第m项的斐波那契数字,然后让这两个数求GCD,输出答案的后8位: 思路: 1/gcd(F[n],F[m])=F[gcd(n,m)].所以先求出gcd(n,m),然后构造斐波那契数列的矩阵快速幂. #include <algorithm> #include <iterator> #include <iostream> #include…
思路: 这个 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 可以想成: [a(n) ] [1 0 1] [a(n-1)   ] [a(n-1) ] =   [1 0 0] * [a(n-2)  ] [a(n-2) ]  [0 1 0] [a(n-3)   ] 然后就是利用矩阵快速幂去算中间那个矩阵的n次结果 #include <iostream> #include <cstdio> #include <cstring> usi…
来提供两个正确的做法: 斐波那契数列双倍项的做法(附加证明) 矩阵快速幂 一.双倍项做法 在偶然之中,在百度中翻到了有关于斐波那契数列的词条(传送门),那么我们可以发现一个这个规律$ \frac{F_{2n}}{F_{n}}=F_{n-1}+F_{n+1} $,那么我就想到了是不是可以用这个公式实现类似于快速幂之类的东西:power(n,m)=power(n*n,m/2) m mod 2=0 power(n,m)=power(n*n,m/2)*n m mod 2=1 快速幂这个东西,是分成偶数情…
题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,第 \(0\) 天的时候你在 \(1\) 号城市,第 \(T\) 天的时候你要回到 \(1\) 号城市. 每条边上的边权表示从城市 \(u_i\) 到达 \(v_i\) 需要的天数. 你每次到达城市 \(i\) 就会获得 \(c_i\) 的愉悦值 另外有 \(k\) 个三元组 \((t_i,x_i,y_i)\) 表示如果你第 \(t_i\) 天到达城市 \(x_i\) 就可以额外获得 \(y_i\) 的愉悦值 求最大愉悦值.…
学了矩阵,练一下手... 1 #include<bits/stdc++.h> 2 typedef long long ll; 3 const ll mod=1e9+7; 4 using namespace std; 5 6 struct Matrix{ 7 ll g[3][3]; 8 Matrix() { 9 memset(g,0,sizeof(g)); 10 }//矩阵初始化为0 11 Matrix operator *(const Matrix &b) const{//重载乘号 1…
P1939 [模板]矩阵加速(数列) 题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入输出格式 输入格式: 第一行一个整数T,表示询问个数. 以下T行,每行一个正整数n. 输出格式: 每行输出一个非负整数表示答案. 说明 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7: 对于100%的数据 T<=100,n<=2*10^9: 直接套矩阵快…
题目大意:给你一个数列a,规定$a[1]=a[2]=a[3]=1$,$a[i]=a[i-1]+a[i-3](i>3)$求$a[n]\ mod\ 10^9+7$的值. 解题思路:这题看似是很简单的递推,但是$n\leq 2×10^9$,递推肯定是会超时的.故我们需要优化. 常见优化有矩阵加速,还有什么我并不知道了. 用矩阵可将此类题目时间复杂度从$O(n)$优化为$O(\log_2 n)$. 具体对于此类形如$f(n)=f(n-1)*p(1)+f(n-2)*p(2)+...+f(n-k)*p(k)…