洛谷P1397 [NOI2013]矩阵游戏】的更多相关文章

矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<vector>#include<cmath>#define MOD 1000000007#define M…
题意 题目链接 Sol 感觉做这题只要对矩阵乘法理解的稍微一点就能做出来对于每一行构造一个矩阵A = a 1      0 b列与列之间的矩阵为B = c 1      0 d最终答案为$A^{n - 1}B A^{n - 1}B \dots $把$A^{n-1}B$看成一项进行快速幂即可 maya把数据范围看漏了1e6个0....... 好像把快速幂换成十进制快速幂就行了 /* 感觉做这题只要对矩阵乘法理解的稍微一点就能做出来 对于每一行构造一个矩阵 A = a 1 0 b 列与列之间的矩阵为…
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的方法. 首先定义两个矩阵: $ A_{1} = \begin{bmatrix} a & b \\ 0 & 1 \end{bmatrix} $ $ A_{2} = \begin{bmatrix} c & d \\ 0 & 1 \end{bmatrix} $ 于是我们就可以得到这样…
P1397 [NOI2013]矩阵游戏 一波化式子,$f[1][m]=a^{m-1}+b\sum_{i=0}^{m-2}a^i$,用快速幂+逆元求等比数列可以做到$logm$ 设$v=a^{m-1},k=\sum_{i=0}^{m-2}a^i$ 那么$f[1][m]=v+bk$ 再对纵列化一波式子,$f[i][m]=f[i-1][m]*vc+bk+vd$ 如果你直接上个矩乘可以拿到65的好分数 #include<iostream> #include<cstdio> #include…
P1129 [ZJOI2007]矩阵游戏 题目描述 小\(Q\)是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个\(N*N\)黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: 行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色) 列交换操作:选择矩阵的任意两列,交换这两列(即交换对应格子的颜色) 游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色. 对于某些关卡,小\…
BZOJ原题链接 洛谷原题链接 通过手算几组例子后,很容易发现,同一列的\(1\)永远在这一列,且这些\(1\)有且仅有一个能产生贡献,行同理. 所以我们可以只考虑交换列,使得每一行都能匹配一个\(1\),且每一行匹配的\(1\)没有重列的,最后交换行排序下即可达到目标. 解决这个问题就不难了,对于一个格子\((x,y)\),若为\(1\),则从它所在的行\(x\)向列\(y\)连一条边,跑一边二分图最大匹配,判断是否是完全匹配即可. #include<cstdio> #include<…
题目大意:给定一个 N*N 的矩阵,有些格子是 1,其他格子是 0.现在允许交换若干次行和若干次列,求是否可能使得矩阵的主对角线上所有的数字都是1. 题解:首先发现,交换行和交换列之间是相互独立的.主对角线上是 1 意味着每行都对应着相应的列.现在考虑 1 是行和列之间的边,若对于这张二分图存在一个完美匹配,根据交换列时与行无关,这样总可以使得主对角线全是 1. 代码如下 #include <bits/stdc++.h> using namespace std; const int maxn=…
题目链接:https://www.luogu.org/problemnew/show/P1129 分析: 这道题不是很好想,但只要想的出来,代码不成问题. 思路1 举几个例子,我们发现, 对于任何数来说,同一行的永远在同一行,同一列的永远在同一列 进一步研究,发现所有行所有列要有1,且至少要有n个1两两不同行不同列 对于每个111,设坐标为(x,y)(x,y)(x,y),那么xxx行向yyy列连边 判断是否有完全匹配(都能匹配上),能匹配上就可以 思路2 这个就是比较拓展的思路了,如果你学了高等…
传送门 首先显然可以矩乘快速幂然后 $T$ 飞 看一眼题解发现因为这一题矩阵的特殊性所以可以对矩阵的次数欧拉降幂 然而我并不懂证明,所以我选择暴力乱搞的做法 十进制快速幂,然后注意一下常数,还有矩阵乘的顺序,别反了 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; typede…
这竟然是一道二分图 乍一看,可能是用搜索做,但是这个数据范围,一定会T. 我们观察发现,无论怎样变换,同一行的一定在同一行,同一列的一定还在同一列.所以说,一行只能配一列.这样,我们的目标就是寻找是否存在一种变换方式,使得行数与列数一一对应,且对应数为n. 我们可以把行数和列数作为二分图的两部分,然后跑一个匈牙利 #include <iostream> #include <cstring> #include <cstdio> #include <cmath>…