摘要:
http://poj.org/problem?id=3735【题意】:有n只猫咪,开始时每只猫咪有花生0颗,现有一组操作,由下面三个中的k个操作组成:1. g i 给i只猫咪一颗花生米2. e i 让第i只猫咪吃掉它拥有的所有花生米3. s i j 将猫咪i与猫咪j的拥有的花生米交换 现将上述一组操作做m次后,问每只猫咪有多少颗花生?【题解】:m达到10^9,显然不能直接算。因为k个操作给出之后就是固定的,所以想到用矩阵,矩阵快速幂可以把时间复杂度降到O(logm)。问题转化为如何构造转置矩阵?说下我的思路,观察以上三种操作,发现第二,三种操作比较容易处理,重点落在第一种操作上。有一个很好的. 阅读全文
posted @ 2012-08-20 21:05
Szz
阅读(703)
评论(0)
推荐(2)
摘要:
矩阵快速:由于矩阵乘法具有结合律,因此对于矩阵A,有A^4 = A * A * A * A = (A*A) * (A*A) = A^2 * A^2。我们可以得到这样的结论:当n为偶数时,A^n = A^(n/2) * A^(n/2);当n为奇数时,A^n = A^(n/2) * A^(n/2) * A (其中n/2取整)。递归:structmartrix{intm[maxn][maxn];};martrixmtmul(martrixa,martrixb){martrixc;inti,j,k;for(i=0;i<n;i++){for(j=0;j<n;j++){c.m[i][j]=0; 阅读全文
posted @ 2012-08-20 11:10
Szz
阅读(224)
评论(0)
推荐(0)
摘要:
http://poj.org/problem?id=3070 题意:已知 Fibonacci 数列 可以这样求 ,求 fn 的最后四位.题解: 矩阵的快速幂#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<set>#include<map>#include<queue>#include<vector>#include<string>#def 阅读全文
posted @ 2012-08-20 10:55
Szz
阅读(200)
评论(0)
推荐(0)
摘要:
转自:http://www.matrix67.com/blog/archives/276/ 好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人,今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。不 要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到 的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和。比 如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是 阅读全文
posted @ 2012-08-20 10:00
Szz
阅读(2102)
评论(0)
推荐(0)
摘要:
http://poj.org/problem?id=3233 题意: 题意:已知一个n*n的矩阵A,和一个正整数k,求S=A+A2+A3+ … +Ak。 /*第一次写时,写挫啦,tle 一次,后来,稍微改动了一下,ac矩阵快速幂。首先我们知道 A^x 可以用矩阵快速幂求出来。其次可以对k进行二分,每次将规模减半,分k为奇偶两种情况,如当k = 6和k = 7时有:S(6) = (1 + A^3) * (A + A^2 + A^3) = (1 + A^3) * S(3)。s(7) = (1 + A^3) * (A + A^2 + A^3) + A^7 = (1 + A^3)*(s(3)) +.. 阅读全文
posted @ 2012-08-20 09:57
Szz
阅读(214)
评论(0)
推荐(0)
浙公网安备 33010602011771号