博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
A Simple Math Problem(HDU 1757 构造矩阵)
阅读量:5165 次
发布时间:2019-06-13

本文共 1696 字,大约阅读时间需要 5 分钟。

If x < 10 f(x) = x.
If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
And ai(0<=i<=9) can only be 0 or 1 .

Sample Input
10 9999
1 1 1 1 1 1 1 1 1 1
20 500
1 0 1 0 1 0 1 0 1 0
 
Sample Output
45
104
1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 int k,n; 7 struct Matrix 8 { 9 int mat[10][10];10 }p;11 int aa[10];12 Matrix mul(Matrix a,Matrix b)13 {14 Matrix c;15 for(int i=0;i<10;i++)16 {17 for(int j=0;j<10;j++)18 {19 c.mat[i][j]=0;20 for(int k=0;k<10;k++)21 c.mat[i][j]=(c.mat[i][j]+a.mat[i][k]*b.mat[k][j])%n;22 }23 }24 return c;25 }26 Matrix mod_pow(Matrix x,int n)27 {28 Matrix res;29 memset(res.mat,0,sizeof(res.mat));30 for(int i=0;i<10;i++)31 res.mat[i][i]=1;32 while(n)33 {34 if(n&1)35 res=mul(res,x);36 x=mul(x,x);37 n>>=1;38 }39 return res;40 }41 int main()42 {43 freopen("in.txt","r",stdin);44 while(scanf("%d%d",&k,&n)!=EOF)45 {46 if(k<10)47 {48 printf("%d\n",k);49 continue;50 }51 memset(p.mat,0,sizeof(p.mat));52 for(int i=0;i<10;i++)53 cin>>p.mat[0][i];54 for(int i=1;i<10;i++)55 p.mat[i][i-1]=1;56 Matrix ans= mod_pow(p,k-9);57 /*for(int i=0;i<10;i++)58 {59 for(int j=0;j<10;j++)60 cout<
<<" ";61 cout<

 

转载于:https://www.cnblogs.com/a1225234/p/5465098.html

你可能感兴趣的文章
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
ES5_03_Object扩展
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>
计算机网络基础知识
查看>>
C#里如何遍历枚举所有的项
查看>>
如何在键盘出现时滚动表格,以适应输入框的显示
查看>>
超级强大的鼠标手势工具
查看>>
常用Dockerfile举例
查看>>
jquery的ajax用法
查看>>