【Bzoj2326】数学作业
来源:互联网 发布:python pdf 下载 编辑:程序博客网 时间:2024/06/09 17:48
题目描述
小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题:
给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenate (1 ..N)是将所有正整数 1, 2, …, N 顺序连接起来得到的数。例如,N = 13, Concatenate (1 .. N)=12345678910111213.小C 想了大半天终于意识到这是一道不可能手算出来的题目,于是他只好向你求助,希望你能编写一个程序帮他解决这个问题。
输入输出格式
输入格式:
从文件input.txt中读入数据,输入文件只有一行且为用空格隔开的两个正整数N和M,其中30%的数据满足1≤N≤1000000;100%的数据满足1≤N≤1018且1≤M≤109.
输出格式:
输出文件 output.txt 仅包含一个非负整数,表示 Concatenate (1 .. N) Mod M 的值。
输入输出样例
输入样例#1:
13 13
输出样例#1:
4
#include <cstdio>#include <algorithm>#include <cstring>#define Rep(i,s,t) for(int i=s;i<=t;i++)using namespace std;typedef long long LL;LL lger=10,n,m,mimi=1;namespace matrix_mul{ struct mat{ LL x[5][5]; mat(){memset(x,0,sizeof(x));} }; mat mul(mat a,mat b){ mat tmp; Rep(i,1,3) Rep(j,1,3) Rep(k,1,3) tmp.x[i][j] = (tmp.x[i][j]+a.x[i][k]*b.x[k][j])%m; return tmp; } mat power(mat a,LL n){ if(n == 0) return a; mat ans = a,tmp = a;n--; while(n){ if(n & 1) ans = mul(ans,tmp); tmp = mul(tmp,tmp); n >>= 1; } return ans; }}int main(){ using namespace matrix_mul; scanf("%lld%lld",&n,&m); mat Ans,tmp,now; Ans.x[1][1]=Ans.x[1][2]=Ans.x[1][3]=1; tmp.x[2][1]=tmp.x[2][2]=tmp.x[3][1]=tmp.x[3][2]=tmp.x[3][3]=1; tmp.x[1][1]=10; if(n < 10){ Ans = mul(Ans,power(tmp,n-1)); printf("%lld\n",(Ans.x[1][1])%m); return 0; } now = power(tmp,8); while(lger <= n){ tmp.x[1][1] = lger*10%m; if(lger*10 <= n) now = mul(now,power(tmp,lger*9)); else now = mul(now,power(tmp,n-lger+1)); lger *= 10; } Ans = mul(Ans,now); printf("%lld\n",(Ans.x[1][1])%m); return 0;}
- BZOJ2326 [HNOI2011]数学作业
- 【bzoj2326】【HNOI2011】【数学作业】
- HNOI2011 BZOJ2326 数学作业
- [BZOJ2326][HNOI2011]数学作业
- 【HNOI2011】【BZOJ2326】数学作业
- bzoj2326&CodeVS2314 数学作业
- bzoj2326: [HNOI2011]数学作业
- 【BZOJ2326】【HNOI2011】数学作业
- bzoj2326【HNOI2011】数学作业
- 【BZOJ2326】数学作业
- 【Bzoj2326】数学作业
- BZOJ2326: [HNOI2011]数学作业
- bzoj2326 [HNOI2011]数学作业
- 【bzoj2326】[HNOI2011]数学作业
- Bzoj2326:HNOI2011-数学作业
- bzoj2326 [HNOI2011]数学作业
- bzoj2326 [HNOI2011]数学作业
- bzoj2326 数学作业 矩阵乘法
- 位域的sizeof问题
- 深度学习RBM
- 【转载】HTTP状态码
- 面向对象的程序设计Java-变量与常量
- 数据结构实验之链表三:链表的逆置
- 【Bzoj2326】数学作业
- mongodb单层组嵌套
- 使用git恢复未提交的误删数据
- 经纬度小数点后与精确到米的误差
- 数据结构实验之链表四:有序链表的归并
- #Paper Reading# Multi-document Summarization Based on Cluster Using Non-negative Matrix
- AsyncTask源码分析
- CSS样式设置小技巧
- 常用的正则表达式