bzoj 2326: [HNOI2011]数学作业
Description
Input
Output
仅包含一个非负整数,表示 Concatenate (1 .. N) Mod M 的值。
Sample Input
Sample Output
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 #define F(i,a,b) for(int i=a;i<=b;i++) 5 #define D(i,a,b) for(int i=a;i>=b;i--) 6 #define ms(i,a) memset(a,i,sizeof(a)) 7 #define LL long long 8 template<class T>void read(T &x){ 9 x=0; char c=getchar(); 10 while (!isdigit(c)) c=getchar(); 11 while (isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar(); 12 } 13 template<class T>void write(T x){ 14 if(x>9) write(x/10); 15 putchar(48+x%10); 16 } 17 18 LL n,m,pw[20],pwm[20]; 19 20 struct Matrix{ 21 int x[3][3]; 22 Matrix operator *(Matrix const &t)const{ 23 Matrix y; ms(0,y.x); 24 F(i,0,2)F(j,0,2)F(k,0,2) y.x[i][j]=(y.x[i][j]+(LL)x[i][k]*t.x[k][j]) % m; 25 return y; 26 } 27 Matrix operator^(LL k){ 28 Matrix ans,tmp; 29 ms(0,ans.x); 30 F(i,0,2) F(j,0,2) tmp.x[i][j]=x[i][j]; 31 F(i,0,2) ans.x[i][i]=1; 32 while (k){ 33 if(k&1) ans=ans*tmp; 34 tmp=tmp*tmp; 35 k>>=1; 36 } 37 return ans; 38 } 39 }; 40 41 int main(){ 42 read(n); 43 read(m); 44 int len=0; 45 LL k=n; 46 while (k){ 47 len++; 48 k/=10; 49 } 50 pw[0]=1; 51 pwm[0]=1%m; 52 F(i,1,19) pw[i]=pw[i-1]*10,pwm[i]=pwm[i-1]* 10% m; 53 LL ans=0; 54 F(i,1,len-1) { 55 Matrix t; 56 ms(0,t.x); 57 t.x[0][0]=pwm[i]; 58 t.x[1][0]=t.x[1][1]=1; 59 t.x[2][0]=t.x[2][1]=t.x[2][2]=1; 60 t=t^(pw[i]-pw[i-1]); 61 ans=(ans*t.x[0][0]+(pwm[i-1]-1)*t.x[1][0]+t.x[2][0])% m; 62 } 63 Matrix t; 64 ms(0,t.x); 65 t.x[0][0]=pwm[len]; 66 t.x[1][0]=t.x[1][1]=1; 67 t.x[2][0]=t.x[2][1]=t.x[2][2]=1; 68 t=t^(n-pw[len-1]+1); 69 ans=(ans*t.x[0][0]+(pwm[len-1]-1)*t.x[1][0]+t.x[2][0]) % m; 70 write(ans); 71 return 0; 72 }
转载于:https://www.cnblogs.com/ZJXXCN/p/9843501.html
bzoj 2326: [HNOI2011]数学作业相关推荐
- BZOJ 2326: [HNOI2011]数学作业( 矩阵快速幂 )
BZOJ先剧透了是矩阵乘法...这道题显然可以f(x) = f(x-1)*10t+x ,其中t表示x有多少位. 这个递推式可以变成这样的矩阵...(不会用公式编辑器...), 我们把位数相同的一起处理 ...
- bzoj 2326: [HNOI2011]数学作业(矩阵快速幂)
2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2249 Solved: 1301 [Submit][St ...
- 洛谷 P3216 [HNOI2011]数学作业
PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P3216 [HNOI2011]数学作业 题目 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正 ...
- HNOI2011 数学作业
先上一下题目吧 HNOI2011 数学作业 Problem 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算 Concatenate(1..N) ...
- [HNOI2011]数学作业
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenat ...
- [HNOI2011]数学作业 分段矩阵乘法
给n,问123--n这个数字串模m的数值,n<=1e18 对于0-9,10-99,这些数字之间都满足f(n)=f(n-1)*10^c,c定值 这每一段都可以做矩阵快速幂 ,存一下[f(n),n, ...
- bzoj2326 [HNOI2011]数学作业
矩阵乘,按位搞 两个矩阵,分别为 ans00i00100 10k11011001 快速幂转移就好了 #include <cstdio> #include <cstring> # ...
- BZOJ2326 [HNOI2011]数学作业 【矩阵快速幂】
题解 我们设f[i]表示前i个数模M意义下的答案 则f[i] = f[i - 1] * 100...0 + i[i是几位就有几个0] 可以写出矩阵递推式: 之后按位数分组矩乘就好了 #include& ...
- [BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)
Description Input Output Sample Input Sample Output HINT Source Solution 递推式长这样:$f[n]=f[n-1]*10^k+n$ ...
最新文章
- TensorRT优化方案图例
- 设计模式系列·抽象工厂模式
- Spring框架使用规范和IOC的开发
- 【MM配置】Movement Type 移动类型创建
- Dingo Api 入门
- linux函数的阻塞与非阻塞IO及错误处理
- 1024程序员节:除了高薪,你还有什么理由坚持做程序员?
- java生成json字符串,真香
- MSRA,我的实习初体验(下)
- 斯坦福大学吴恩达机器学习教程中文笔记——目录
- 秀米编辑器内容复制到wangEditor中图片的处理
- 网络渗透测试实验二(网络扫描与网络侦察)
- 不是科班出身可以做配音演员吗?成都环宇博睿告诉你有没有学历要求?
- 【云和恩墨大讲堂】高凯 | Oracle 12c 新特性-多租户的维护管理
- FigDraw 22. SCI文章中绘图之核密度及山峦图 (ggridges)
- java 函数表_C语言、Java语言的符号表区别和特点是什么?分别是如和处理函数参数的?...
- contentprovider踩坑之路之Failed to find provider info for com.example.app.provider和cursor=null空指针问题
- Python利用经纬度创建shpfile点图层并生成tif
- java实现简单的日历功能
- 微信小程序——好看的文字加输入框(文本框)
热门文章
- 通过form表单请求servlet资源代码
- Java NIO 选择器(Selector)的内部实现(poll epoll)
- 多线程端点服务发布程序(摘)
- 时间复杂度和空间复杂度3 - 数据结构和算法05
- (转载)为什么欧美拿金牌不感谢祖国
- 计算机科学 生物技术,计算机科学(Computer Science)简介
- 麻省理工学院计算机博士年薪,麻省理工学院计算机博士录取要求
- python深浅拷贝 面试_python基础-深浅拷贝
- r语言读取csv文件赋值gamma_tidyfst vs pandas(1):csv文件读写
- code vs 把所有行拼接成一行_关于SQL Server将一列的多行内容拼接成一行的问题讨论...