摘要:
对于”把一个向量v变成另一个向量v',并且v'的每一个分量都是v的各个分量的线性组合”这样的问题,一般都可以考虑用矩阵乘法来描述他们的变化关系。而用矩阵乘法的好处在于,可以使用快速幂来优化时间复杂度,将原本O(n)的递推优化到O(logn)。 解决这类问题,最简单也最常见的例子莫过于求Fibonacci数列中的第n项,比如POJ 3070Fibonacci。并且,题目已经构造好了转化矩阵,见下图。 . 注意,这样的方法只能求出最标准的Fibonacci数列的第n项,即1,1,2,3,5...如果F(0)和F(1)改变,还需要对这个等式稍做变动。这样的题,比... 阅读全文
摘要:
1、UVALive 5028/HDU 3723Delta Wave题意:在x-y平面直角坐标系中,每一步都只能从(x0, y0)走到(x0+1, y0)或(x0+1, y0-1)或(x0+1, y0+1),且每一步只能走在第一象限或者x轴正版轴上。给定N,问从点(0, 0)走到(N, 0)共有多少种走法,输出走法数量mod 10^100。2 = 0。枚举1的数量,则0,-1也知道了。枚举0的位置,给1和-1安排位置就是一个卡特兰数。所以枚举i = 0 to n/2,ans += C(n, 2*i) * catalan(i)。而且这个等式是可以用递推求得的。 下面证明,给m个1和m个-1安排.. 阅读全文
摘要:
最近看了潘震皓的《置换群快速幂运算 研究与探讨》,总结一下。具体推导过程参见原文。1、置换群的乘方:求T^k(k为正整数)对于置换T,用数组a[i][]表示置换T的循环,约定a[i][0]为该循环内最小的数,且l[i]表示对应循环的长度,记。:对每个循环,若l[i]是k的倍数,则乘方之后分裂为k个循环,并且每个循环分别是循环a[i]中下标j mod k = 0, 1, 2....的元素按顺序连接。对每个循环,若gcd(l[i], k) = 1,则乘方之后仍然是一个循环,设原循环为数组a[i],长度为l[i],乘方之后为a[i]',则a[i]'[j] = a[i][k*j mod 阅读全文
摘要:
大素数检测大素数检测常用的方法为miller_rabin。网上讲这个方法的文章博客已经很多了,我在这里就只转载一篇别人的文章。原文出处:http://www.cppblog.com/zoyi-zhang/archive/2008/09/23/62572.aspx 1 大素数的检验 2 费马小定理:a^(p-1) mod p = 1(p是素数&&a0) 3 4 首先我们证明这样一个结论:如果p是一个素数的话,那么对任意一个小于p的正整数a,a, 2a, 3a, …, (p-1)a 5 除以p的余数正好是一个1到p-1的 6 排列。例如,5是素数,3, 6, 9, 12除以5的余数分别为3, .. 阅读全文
摘要:
问题:给定一个正整数m和两个正数数组a[n]和b[n]。对于数组x[n],x[n]中有m个i使得x[i] = 0,其余x[i] = 1,并且令R = segma(a[i]*x[i]) / segma(b[i]*x[i])。求一个满足条件的x[n],使得R的值最大,输出R的最大值。分析:构造函数F(L) = segma(a[i]*x[i]) - L * segma(b[i]*x[i]) = segma((a[i] - L * b[i]) * x[i])。令c[i] = a[i] - L * b[i]。 观察F(L),发现以下性质:1、若L固定,则可以通过一次对c[i]的排序,找到使得F(L).. 阅读全文
摘要:
SRM 593DIV1 250pt题意:有如下图所示的平面,每个六边形有坐标。将其中一些六边形染色,要求有边相邻的两个六边形不能染同一种颜色。给定哪些六边形需要染色,问最少需要多少种颜色。解法:首先,需要0种颜色和需要1种颜色很容易判断,其次,最多需要3种颜色。易证。 也就是说,难以判断的就是需要2种颜色还是3种颜色。假定只需要染2种颜色,然后将需要染色的六边形染色,看是否会出现矛盾。用DFS染色。Ps:和官方题解一比,自己写的代码太麻烦了....tag:染色 1 /* 2 * Author: plum rain 3 * score : 0 4 */ 5 #line 11 "He.. 阅读全文
摘要:
可能是目前做的这类题都比较简单,所以几乎都是套上模板就差不多了.....这里copy一份czyuan大神的模板 1 /* 用于求整数解得方程组. */ 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn = 105; 7 int equ, var; // 有equ个方程,var个变元。增广阵行数为equ, 分别为0到equ - 1,列数为var + 1,分别为0到var. 8 int a[maxn][maxn]; 9 int x[maxn]; // 解集. 10 bool fr... 阅读全文
摘要:
SRM 475DIV1 300pt题意:玩游戏。给一个棋盘,它有1×n(1行n列,每列标号分别为0,1,2..n-1)的格子,每个格子里面可以放一个棋子,并且给定一个只含三个字母WBR,长度为n的字符串,代表每个格子的颜色。在游戏开始时,r个棋子随机摆放在这n个格子里(每个棋子摆在每个格子里的概率相同),问游戏结束时,这些格子里所剩棋子数的期望。游戏的规则为(记这个棋盘的列数为size): 1、如果棋子在0格,则向右移动一格; 2、如果棋子在size-1或size-2格,则向左移动一格; 3、其他棋子若在颜色为W的格子则左移一格,若在颜色为B的格子则右移一格,若在颜色为R的格子:若. 阅读全文
摘要:
总结:满足下面这句话的条件,都可以考虑矩阵乘法+快速幂——把一个向量v变成另一个向量v',并且v'的每一个分量都是v的各个分量的线性组合。1、UVa 10870,Recurrences题意:给出递推关系f(n) = a1*f(n-1) + a2*f(n-2)....ad*f(n-d),给出d, n, m, a1, a2, ...ad, f(1), f(2)...f(n-d),求f(n) % m。解法:矩阵乘法+快速幂。这是我第一次做矩阵乘法的题,由于是专题训练,一上来就构造成f(n) = G * F(n-1),只需要G = [a1, a2,...ad],F(n-1) = [f( 阅读全文
摘要:
SRMSRM147 DIV1 1000pt DPSRM148 DIV1 1100pt 递归SRM149 DIV1 1000pt mathSRM150 DIV1 500pt DPSRM469 DIV1 500pt DPSRM470 DIV1 500pt math, 期望SRM472 DIV1 600pt mathSRM475 DIV1 300pt think 阅读全文