博客
关于我
hdu 1757 A Simple Math Problem(矩阵快速幂)
阅读量:136 次
发布时间:2019-02-27

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

分析

f的递推关系

在这里插入图片描述

代码

#include
using namespace std;#define mod(x) ((x)%m)int k, m;struct mat{ int d[10][10]; mat operator*(const mat x){ mat ret; int tmp; for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ tmp = 0; for(int k = 0; k < 10; k++){ tmp = mod(tmp + d[i][k]* x.d[k][j]); } ret.d[i][j] = tmp; } } return ret; } void init_unit(){ for(int i = 0; i < 10; i++) for(int j = 0; j < 10; j++) d[i][j] = i == j ? 1 : 0; } void init(){ for(int i = 0; i < 10; i++) for(int j = 0; j < 10; j++) d[i][j] = i == j+1 ? 1 : 0; } void set(int i, int v){ d[9-i][9] = v; }}a;mat fastPow(mat base, int pow){ mat res; res.init_unit(); while(pow){ if(pow & 1) res = res * base; base = base * base; pow >>= 1; } return res;}int main(){ int tmp; while(scanf("%d%d", &k, &m) == 2){ if(k < 10){ // 猜测:本题无此测试数据 printf("%d\n", k%m); continue; } a.init(); for(int i = 0; i < 10; i++) scanf("%d", &tmp), a.set(i, tmp); a = fastPow(a, k-9); int ans = 0; for(int i = 0; i < 10; i++) ans = mod(ans+a.d[i][9]*i); printf("%d\n", ans); } return 0;}

转载地址:http://dwib.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(49)——从开发规范、选型、拆分到减压
查看>>
Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
查看>>
Mysql学习总结(50)——Oracle,mysql和SQL Server的区别
查看>>
Mysql学习总结(51)——Linux主机Mysql数据库自动备份
查看>>
Mysql学习总结(52)——最全面的MySQL 索引详解
查看>>
Mysql学习总结(53)——使用MySql开发的Java开发者规范
查看>>
Mysql学习总结(54)——MySQL 集群常用的几种高可用架构方案
查看>>
Mysql学习总结(55)——MySQL 语句大全再温习
查看>>
Mysql学习总结(56)——MySQL用户管理和权限设置
查看>>
Mysql学习总结(57)——MySQL查询当天、本周、本月、上周、本周、上月、距离当前现在6个月数据
查看>>
Mysql学习总结(58)——深入理解Mysql的四种隔离级别
查看>>
Mysql学习总结(59)——数据库分库分表策略总结
查看>>
Mysql学习总结(5)——MySql常用函数大全讲解
查看>>
Mysql学习总结(60)——并发量大、数据量大的互联网业务数据库设计规范总结
查看>>
Mysql学习总结(61)——MySQL优化之DBA级优化整理汇总
查看>>
Mysql学习总结(62)——MySQL连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link问题
查看>>
Mysql学习总结(63)——Mysql数据库架构方案选择与分析
查看>>
Mysql学习总结(64)——Mysql配置文件my.cnf各项参数解读
查看>>
Mysql学习总结(65)——项目实战中常用SQL实践总结
查看>>
Mysql学习总结(66)——设置MYSQL数据库编码为UTF-8
查看>>