用户工具

站点工具


2020-2021:teams:no_morning_training:weekly:week9

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
2020-2021:teams:no_morning_training:weekly:week9 [2020/07/31 09:39]
shaco 创建
2020-2021:teams:no_morning_training:weekly:week9 [2020/07/31 16:15] (当前版本)
发源于
行 6: 行 6:
 ===== 王瑞琦 ===== ===== 王瑞琦 =====
 ===比赛=== ===比赛===
 +
 ===专题=== ===专题===
 +
 ===== 冯宇扬 ===== ===== 冯宇扬 =====
 +===比赛===
 +cf 659 div 2\\
 +[[2020-2021:​teams:​no_morning_training:​fayuanyu:​cf_r660d2|cf 660 div 2]]
 ===== 常程 ===== ===== 常程 =====
 ===比赛=== ===比赛===
行 17: 行 22:
 ===== 本周推荐 ===== ===== 本周推荐 =====
 ==== 王瑞琦 ==== ==== 王瑞琦 ====
-==== 冯宇扬 ​==== +写了一道矩阵快速幂的模板题。 
-==== 常程 ​==== +===来源=== 
-=== 来源 ​=== +洛谷P3390:[[https://​www.luogu.com.cn/​problem/​P3390|【模板】矩阵快速幂]] 
-=== 标签 ​=== +===标签=== 
-=== 题意 ​=== +数学,矩阵乘法 
-=== 思路 ​=== +===题意=== 
-<hidden code> +给出一个n*n的矩阵,计算其的k次方 
-<code cpp>+===题解=== 
 +对矩阵运用快速幂==\\ 
 +快速幂:\\ 
 +对于n的k次方,可以不需要计算k次,只需计算出n^(k/​2),然后再开方即可(对于k为奇的情况要再乘一个n)\\ 
 +可以将复杂度降到O(logn)\\ 
 +<hidden 代码>​ 
 +<code c> 
 +#include <​stdio.h>​ 
 +#define p 1000000007 
 +struct matrix{ 
 + long long m[101][101];​ 
 +}; 
 +typedef struct matrix Matrix; 
 +long long n; 
 + 
 +Matrix work(Matrix a,Matrix b) 
 +
 + Matrix tmp; 
 + for (long long i=1;i<=n;i++) 
 + for (long long j=1;j<=n;j++) 
 +
 + tmp.m[i][j]=0; 
 + for (long long k=1;k<=n;k++) 
 + tmp.m[i][j]=(tmp.m[i][j]+a.m[i][k]*b.m[k][j])%p;​ 
 +
 + return tmp; 
 +
 + 
 +Matrix ksm(Matrix a,long long m) 
 +
 + Matrix tmp=a,b=a; 
 + m--; 
 + while (m>0) 
 +
 + if (m%2==1) tmp=work(b,​tmp);​ 
 + b=work(b,​b);​ 
 + m=m/2; 
 +
 + return tmp; 
 +
 + 
 +int main() 
 +
 + long long k; 
 + Matrix a; 
 + scanf("​%lld%lld",&​n,&​k);​ 
 + for (long long i=1;​i<​=n;​i++) 
 + for (long long j=1;j<=n;j++) scanf("​%lld",&​a.m[i][j]);​ 
 + a=ksm(a,​k);​ 
 + for (long long i=1;i<=n;i++) 
 +
 + for (long long j=1;​j<​=n;​j++) 
 + printf("​%lld ",​a.m[i][j]);​ 
 + printf("​\n"​);​ 
 +
 + return 0; 
 +}
 </​code>​ </​code>​
 </​hidden>​ </​hidden>​
-=== comment ===+===comment=== 
 +一道模板题。矩阵快速幂的运用范围还是挺广的。 
 + 
 +==== 冯宇扬 ==== 
 +就[[2020-2021:​teams:​no_morning_training:​fayuanyu:​cf_r660d2|cf 660 div 2]]吧 
 +==== 常程 ==== 
 +本周摸了
  
  
  
  
2020-2021/teams/no_morning_training/weekly/week9.1596159587.txt.gz · 最后更改: 2020/07/31 09:39 由 shaco