逆元 + 费马定理 + 欧拉定理 一,逆元:先让我们考虑如何求解线性同余方程 :a * x ≡ b ( mod m ) (1)(x为一个变量)。对于方程:a * x = b ,由于a存在倒数1/a ( a * y = 1,y为a的倒数) 所以我们可以很容易求解出该方程。如果 在(1)模运算中也存在类似于倒数的数y,这样我们就能很快的求解出(1)方程。 x = b * y; 在这里我们称y为a 的逆元,1
poj 1845 Sumdiv 题目链接:http://poj.org/problem?id=1845一,题意: 给定两个整数A,B,要求出A的B次幂,所有因子之和(要求%9901)。二,分析:1,我们知道每一个整数A都可以唯一的分解成若干素数幂的乘积,这些素数就是A的质因数:2,对于A 所有约数和我们有公式:3,我们在求解:是应用了二分等比数列求和法我们利用递归方法可以
Nim 博弈 一,题意:有n堆石子,每堆有ai个石子,Alice与Bob两人轮流取石子,每次取石子要求从非空堆中取走至少一颗石子,Alice为先手,取光所有石子的一方获胜,二,解析:该题为标准的Nim博弈,必胜态(非奇异态):a1 ^ a2 ^ a3 …… ^an != 0;必败态(奇异态): a1 ^ a2 ^ a3 …… ^an == 0;三,代码:#include
hdu 1525 Euclid's Game 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1525一,题意:给定两个整数N,M,Stan与Ollie轮流从较大的数中减去较小数的整数倍,但是该倍数不能超过较大的数,即运算后的结果不能为负数。从stan开始,若谁能将一个数变为0则其获胜。二,解析:我们分析一下对于当前状态为(a、b)怎么判断该状态是否为奇异态,我们令a>b
poj 2484 A Funny Game 题目:http://poj.org/problem?id=2484一,题意:n个硬币围成一个圈,Alice与Bob轮流从圈中取硬币,每次可以取一枚或者连续的两枚,硬币取走后留下的空位不用填补,空位相隔的两个硬币视为不相邻,Alice第一个开始取,取走最后一个硬币的人为胜利者,二,解析:该题为一道简单的博弈,是一道模范对手动作的博弈,先看看该博弈的奇异态 : 当该圈被取掉
hdu 1074 Doing Homework 压缩dp 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074一,题意:给你N个课程,每一个课程由三部分组成 名字,最后期限,完成所需时间,当你完成某一个课程在最后期限以后,会被扣分,扣的分数就是超出的的时间,并且要求当扣分相同的情况下要以字典序输出。二,分析:如果不需要以字典序输出的话我们可以用0 1背包可以解决,为了解决字典序这一
三大经典博弈 尼姆博奕 + 巴仕博弈 + 威佐夫博弈 +SG函数 第一,尼姆博奕(Nimm Game)一,特例分析有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。 任何奇异局势(a,b,c)都有
poj3254 Corn Fieldsdp 状态压缩 一,题意:给定一个N*M的矩阵,矩阵每个格子中只可能有两个数字0,1,1表示该土地肥沃可以种草放牛。0表示该土地不肥沃不可以种草放牛。且牛不能放在相邻的位置,问有多少种放牛的方法。二,解析:该题主要应用了图的位压缩成数的思想与递推的思想,即压缩dp。三,代码:#include #include #include #include using namespace
poj 1191 棋盘分割 (压缩dp+记忆化搜索) 一,题意:中文题二,分析:主要利用压缩dp与记忆化搜索思想三,代码:#include #include #include #include #include using namespace std;const int Big=20000000;int Mat[10][10];int N;int sum[10][10];int dp[20][10][10][1
POJ2155 Matrix二维线段树 一,题意:给你一个全为0的N * N的矩阵,对这个矩阵有两个操作(对于矩阵只有两个状态0,1)(1):“C x1,y1,x2,y2” 就是将左上角为x1,y1,右下角为x2,y2,的这个矩阵内的数字全部翻转。(2):“Q x1 y1” 输出a[x1][y1]的值。二,解析:该我主要应用令二位的树状数组,一个是行,一个是列。三,代码:#include#inclu
线段树模板(区间最小值优化 版) (RMQ with Shifts) 题意:#include #include #include #include #include using namespace std;const int maxn =100010;int RMQ[maxn<<2];int str[maxn];int N,M;char ctr[35];int total[35],cnt;int build(int first,int
树状数组求最大值 (RMQ with Shifts) 代码:#include #include #include #include using namespace std;const int Max=200010;int RMQ[Max+10];int total[Max];int sum[35];int N,M,cnt;char ctr[35];int bit(int x){//每个下标管辖的范围 return
poj1222 EXTENDED LIGHTS OUT (高斯消元) 题目链接:http://poj.org/problem?id=1222一,题意:有一个5 * 6 的矩阵 矩阵里面每一个格子都有一个开关,开关只有两种状态,开与关。我们用1表示开,0表示关,每一个开关的状态变化都会影起其上下左右开关的变化。我们开始给出矩阵中所有开关的初始状态,问改变多少个开关的状态能使得所有开关变成关。我们用1表示改变,用0表示不变。输出所有开关改变状态。
高斯消元模板 高斯消元:其实就是用矩阵初等变换解线性方程组,只是他要求每次选取的主元一定要是最大值。模板#include #include #include #include using namespace std;const int MAXN=10000;int a[MAXN][MAXN];//增广矩阵int x[MAXN];//解集bool free_x[MAXN];//标记是否
poj 1830 开关问题 (高斯消元) 题目链接:http://poj.org/problem?id=1830一,题意:该题是中文提,题意我就不解释了。二,解析:该题我们先的建立一个图,我们以开关为节点,若开关x的变化会影响y开关,则连一条x到y的有向边。然后我们用邻接矩阵来存储该图。则邻接矩阵中0表示不影响,1表示反转。例如:样例一, 开始状态为 0 0 0 最终状态为: 1 1 1
hdu 2476 区间dp 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2476一:题意:给定你两个字符串str1与str2,str1为初始串,str2是目标串。要你将str1变成str2串,你能做的操作只有:在str1中选取一段连续的区间将其变成全都变成同一个字母(任意一个小写字母)。问你str1最少要经过多少次这样的操作能变成str2.二,解析:我
hdu 2255奔小康赚大钱 KM算法模板 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255一,KM算法:(借助这个题写一下个人对km的理解与km模板)KM算法主要是用来求解图的最优匹配的。1,带权二分图: 在二分图中每一条边(x,y)对应一个权值Wi这种二分图叫带权二分图。一个匹配的权值就是该匹配中所有边的权值之和。2,最优匹配:权值最大的一个完美匹配,叫做最
hdu 2063 过山车 二分图+最大匹配+匈牙利算法 一,二分图概念:1,二分图:二分图又称为二部图,它是图论中特殊的一种模型,令G=(v,E)是一个图,若该图中节点能被分成两个不相交的两个子集:A,B。即: (AU B) =V (A ⋂B)=ϕ。且图中每一条边(x,y)所关联的两个顶点x,y分别属于A,B两个集合内。则称G为二分图。2,匹配:在图论中,匹配是图中的一个边集,在该边集中任何两条边没有共公共端点,(1)
POJ3186:Treats for the Cows 区间DP 题目链接:http://poj.org/problem?id=3186一:题意:给定一个序列,序列中有N个元素,我们每次都可以从序列最前面或者最后面取出一个数,假设按照上面的方法取完所有原序列的数,形成新的序列为a1,a2,,,an,我们为这个序列定义一个权值:W=a1 * 1 + a2 * 2 + ,,,,,+an*n。题目要求,求出最大的权值。二,解析:dp[i][j]
POJ 2096 Collecting Bugs 期望DP 题目链接:http://poj.org/problem?id=2096一,题意:一个软件有m个子系统,n种bug,有个人每一天都能在该系统中找到一个bug。每一bug都等可能的属于n种bug中的一种,也等概率的属于m个子系统中的一个。要求,在这个软件中找齐 n 种 bug,并且每个子系统中至少包含一个 bug 的时间的期望值(单位:天)。二,解析:1,我们定义dp[i][j