这道题看着挺难然而其实看破了也挺容易的。首先N极其的大,几乎要炸掉long long ,所以O(n)的算法一定是扑街了,身为一个脑残志坚的OIer,怎能不想到矩阵快速幂优化呢?

  有趣的是这道题矩阵有很多种,Q某犇有另一种做法,大家也可以去他那看一看。

  答案矩阵是这样的:

    f[x]   x+1   1

  被我们用来求答案的矩阵长这样:

    10^t     0      0

    1         1      0

    0         1      1

   其中t随我们现在处理的数的位数而改变。

  然后这道题就硬生生的被我们搞成了一个矩阵快速幂的裸题。只要注意矩阵乘不满足交换律就是了。

  

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<map>
 7 #include<queue>
 8 #include<string>
 9 #include<cmath>
10 using namespace std;
11 long long n,m;
12 struct no{
13     long long x,y;
14     long long a[20][20];
15     no operator *(const no &c){
16         no b;
17         memset(b.a,0,sizeof(b.a));
18         b.x=x;
19         b.y=y;
20         for(int i=1;i<=x;i++)
21         {
22             for(int j=1;j<=y;j++)
23             {
24                 for(int k=1;k<=y;k++)
25                 {
26                     b.a[i][j]+=((a[i][k]%m)*(c.a[k][j]%m))%m;
27                     b.a[i][j]%=m;
28                 }
29             }
30         }
31         return b;
32     }
33 };
34 no ksm(long long x,no a,no b){
35     no ans=a;
36     while(x)
37     {
38         if((x&1)) ans=ans*b;
39         b=b*b;
40         x>>=1;
41     }
42     return ans;
43 }
44 long long get(long long x){
45     long long now=1;
46     no ans,a;
47     memset(a.a,0,sizeof(a.a));
48     a.x=a.y=3;
49     a.a[2][1]=a.a[2][2]=a.a[3][2]=a.a[3][3]=1;
50     memset(ans.a,0,sizeof(ans.a));
51     ans.x=1,ans.y=3;
52     ans.a[1][1]=0;
53     ans.a[1][2]=ans.a[1][3]=1;
54     for(int i=1;;i++)
55     {
56         now*=10;
57         if(x>(now-1))
58         {
59             a.a[1][1]=now;
60             ans=ksm(now-now/10,ans,a);
61         }
62         else
63         {
64             a.a[1][1]=now;
65             ans=ksm(x-(now/10-1),ans,a);
66             break;
67         }
68     }
69     return ans.a[1][1];
70 }
71 int main(){
72     scanf("%lld%lld",&n,&m);
73     printf("%lld\n",get(n));
74     //while(1);
75     return 0;
76 }

View Code

转载于:https://www.cnblogs.com/liutianrui/p/7360281.html

[HNOI2011]数学作业 题解相关推荐

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

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

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

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

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

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

  4. HNOI2011 数学作业

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

  5. [HNOI2011]数学作业

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

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

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

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

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

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

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

  9. [HNOI2011]数学作业 分段矩阵乘法

    给n,问123--n这个数字串模m的数值,n<=1e18 对于0-9,10-99,这些数字之间都满足f(n)=f(n-1)*10^c,c定值 这每一段都可以做矩阵快速幂 ,存一下[f(n),n, ...

最新文章

  1. reactnative 获取定位_react native 获取地理位置的方法示例
  2. VC2008下编译使用OpenSSL
  3. Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题
  4. 版本名称GA的含义:SNAPSHOT-alpha-beta-release-GA
  5. Jerry的ABAP, Java和JavaScript乱炖
  6. centos6.6 源码安装mysql5.5_CentOS6.x下源码安装MySQL5.5
  7. python+selenium+unittest测试框架1-unittest单元测试框架和断言
  8. js中数字直接点方法会报错,如1.toString()
  9. ssas还原数据库_SSAS数据库管理
  10. shell脚本监控cpu/内存使用率 转
  11. HDU2523 SORT AGAIN【计数排序】
  12. django models 配置
  13. Windows驱动开发技术详解——经典书评
  14. 简练软考知识点整理-管理沟通
  15. 关于document.cookie的使用javascript
  16. laxTex 手写体
  17. 唯美毕业论文答辩PPT模板
  18. java实现交集并集差集
  19. 如何用foobar200转换无损wma!
  20. 第五章 黎明踏浪号 Facebook (一)

热门文章

  1. Ubuntu 10.04 安装在 VMware Workstation 7 后,键盘无反应的解决方法
  2. 在 SQL Server 的存储过程中调用 Web 服务
  3. C#值类型和引用类型的区别
  4. redis学习-摘抄
  5. 智慧楼宇物联网公司En-trak获Pre-A 轮融资
  6. 部署LNMP高可用负载群集
  7. 一个简单的实现了智能虚拟女友—图灵机器人
  8. window下Ionic环境安装
  9. ctype.h(c标准库)
  10. WCF框架基础(一)