数学作业

Time Limit: 10 Sec  Memory Limit: 128 MB
[Submit][Status][Discuss]

Description

  

Input

  输入文件只有一行为用空格隔开的两个正整数N和M。

Output

  输出仅包含一个非负整数,表示Concatenate(1~N) MOD M的值。

Sample Input

  12345678910 1000000000

Sample Output

  345678910

HINT

  1<=N<=10^8 , 1<=M<=10^9

Main idea

  给定一个n,m,创造一个数字顺序连接1~n,输出这个数对m取模的值。

Solution

  n<=10^18,排除找规律的可能性,立马想到了用矩阵乘法优化DP,令f[i]表示1~i的值,那么:

  然后我们只要推出矩阵即可,轻松想到了:

  然后分段矩乘得到答案。

Code

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<cmath>
 8 using namespace std;
 9
10 const int ONE=5;
11
12 long long n,MOD;
13 long long a[ONE][ONE],b[ONE][ONE];
14 long long Index;
15
16
17 void Mul(long long a[ONE][ONE],long long b[ONE][ONE],long long ans[ONE][ONE])
18 {
19         long long jilu[ONE][ONE];
20         for(int i=1;i<=3;i++)
21         for(int j=1;j<=3;j++)
22         {
23             jilu[i][j]=0;
24             for(int k=1;k<=3;k++)
25             jilu[i][j]=(jilu[i][j] + a[i][k]*b[k][j]%MOD) % MOD;
26         }
27
28         for(int i=1;i<=3;i++)
29         for(int j=1;j<=3;j++)
30         ans[i][j]=jilu[i][j];
31 }
32
33 void Matrix(long long a[ONE][ONE],long long b[ONE][ONE],long long t)
34 {
35         while(t)
36         {
37             if(t&1) Mul(a,b,a);
38             Mul(b,b,b);
39             t>>=1;
40         }
41 }
42
43 int main()
44 {
45         cin>>n>>MOD;
46         a[1][3]=1;
47
48         long long len=1;
49         for(;;)
50         {
51             len*=10;
52             memset(b,0,sizeof(b));
53             for(int i=1;i<=3;i++)
54             {
55                 for(int j=1;j<=i;j++)
56                 b[i][j]=1;
57             }
58             b[1][1]=len % MOD;
59
60             if(len<=n) Index=len-len/10;
61             else Index=n-len/10+1;
62             Matrix(a,b,Index);
63             if(len>n) break;
64         }
65
66         printf("%lld",a[1][1]);
67 }

View Code

转载于:https://www.cnblogs.com/BearChild/p/6441341.html

【BZOJ2326】【HNOI2011】数学作业 [矩阵乘法][DP]相关推荐

  1. [BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)

    Description Input Output Sample Input Sample Output HINT Source Solution 递推式长这样:$f[n]=f[n-1]*10^k+n$ ...

  2. 【bzoj2326】[HNOI2011]数学作业 矩阵乘法

    题目描述 题解 矩阵乘法 考虑把相同位数的数放到一起处理: 设有$k$位的数为$[l,r]$,那么枚举从大到小的第$i$个数(即枚举$r-i+1$),考虑其对$Concatenate(l..r)$的贡 ...

  3. BZOJ 2326: [HNOI2011]数学作业( 矩阵快速幂 )

    BZOJ先剧透了是矩阵乘法...这道题显然可以f(x) = f(x-1)*10t+x ,其中t表示x有多少位. 这个递推式可以变成这样的矩阵...(不会用公式编辑器...), 我们把位数相同的一起处理 ...

  4. BZOJ2326 [HNOI2011]数学作业 【矩阵快速幂】

    题解 我们设f[i]表示前i个数模M意义下的答案 则f[i] = f[i - 1] * 100...0 + i[i是几位就有几个0] 可以写出矩阵递推式: 之后按位数分组矩乘就好了 #include& ...

  5. bzoj2326 [HNOI2011]数学作业

    矩阵乘,按位搞 两个矩阵,分别为 ans00i00100 10k11011001 快速幂转移就好了 #include <cstdio> #include <cstring> # ...

  6. bzoj 2326: [HNOI2011]数学作业(矩阵快速幂)

    2326: [HNOI2011]数学作业 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2249  Solved: 1301 [Submit][St ...

  7. 洛谷 P3216 [HNOI2011]数学作业

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P3216 [HNOI2011]数学作业 题目 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正 ...

  8. HNOI2011 数学作业

    先上一下题目吧 HNOI2011 数学作业 Problem 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算 Concatenate(1..N) ...

  9. bzoj 2326: [HNOI2011]数学作业

    Description 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题:给定正整数 N 和 M 要求计算 Concatenate (1 .. N) Mod M 的值,其中 Conc ...

最新文章

  1. wxWidgets:wxConfig 概述
  2. 《数据中台:让数据用起来》读书笔记
  3. 【Logstash】记录一次logstash拉取数据很慢的问题
  4. 电脑的基本按键功能有哪些?
  5. 全解电磁流量计功能和精度性能
  6. pingpong php,php – 使用pingpong包在laravel 5.1中创建子模块文件夹
  7. 幻读Java_关于幻读 - hellopretty - 博客园
  8. Maven入门教程(十七)-Maven多Moudle项目创建
  9. html统计表合并单元格的快捷键,excel中合并单元格的快捷键的方法及设置技巧
  10. 外汇和股票有什么区别啊?
  11. Excel合并多个有文本的单元格
  12. NDN的互联网信息高速最后一公里
  13. 信号灯管理服务器CPU型号,正文-新华三集团-H3C
  14. pip安装.whl文件
  15. 【CTF bugku 秋名山车神】关于会话脚本、session、正则表达式
  16. 距离2022年春节还有多少天?2022年春节倒计时天数在手机便签上设置
  17. 虚拟机搭建svn服务器,轻松搭建一台Windows SVN服务器
  18. arm+fpga架构优势,米尔MYC-JX8MMA7新品发布!
  19. 山东理工大学计算机组成原理试题,山东理工大学成人高等教育计算机组成原理试卷(共3份)...
  20. 企业移动设备管理(MDM)概述

热门文章

  1. Magento模块解析
  2. javacore分析工具_「赵强老师」如何分析Java的内存溢出问题
  3. python哪些是可变对象_什么是Python可变对象和不可变对象
  4. iphone无线服务器未响应,iPhone无线充电断断续续或无法充电是什么原因?
  5. ioca0中断 pic单片机_关于PIC单片机的一些经验总结 -单片机-电子工程世界网
  6. cd命令无法切换路径(Windows下)
  7. rabbitmq实战:高效部署分布式消息队列_一文看懂消息队列中间件--AMQ及部署介绍...
  8. 关于startActivityForResult
  9. hdu 5339 Untitled【搜索】
  10. jspxcms bug表