[HNOI2011]数学作业
题目描述
小 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 的值。
输入输出样例
题解:
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<queue> #include<stack> #include<ctime> #include<vector> using namespace std; typedef long long lol; lol n,m,now,pre; struct matrix {lol a[3][3];matrix(){for(int i=0;i<3;i++)for(int j=0;j<3;j++)a[i][j]=0;}matrix(lol b[3][3]){for(int i=0;i<3;i++)for(int j=0;j<3;j++)a[i][j]=b[i][j];}friend matrix operator * (const matrix a,const matrix b){matrix ans;for(int i=0;i<3;i++)for(int j=0;j<3;j++)for(int k=0;k<3;k++)ans.a[i][j]=(ans.a[i][j]+(a.a[i][k]%m)*(b.a[k][j]%m)%m)%m;return ans;} }S,T; lol gi() {lol ans=0,f=1;char i=getchar();while(i<'0'||i>'9'){if(i=='-')f=-1;i=getchar();}while(i>='0'&&i<='9'){ans=ans*10+i-'0';i=getchar();}return ans*f; } int main() {lol i,j,k;n=gi();m=gi();lol s[3][3]={{0,1,1},{0,0,0},{0,0,0}};S=matrix(s);for(k=10;now<n;k*=10){lol t[3][3]={{k%m,0,0},{1,1,0},{0,1,1}};T=matrix(t);pre=min(k-1,n)-now;while(pre){if(pre&1)S=S*T;T=T*T;pre>>=1; }now=min(k-1,n);}printf("%lld\n",S.a[0][0]);return 0; }
转载于:https://www.cnblogs.com/huangdalaofighting/p/7214691.html
[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) ...
- bzoj 2326: [HNOI2011]数学作业
Description 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题:给定正整数 N 和 M 要求计算 Concatenate (1 .. N) Mod M 的值,其中 Conc ...
- [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$ ...
最新文章
- 美妆彩妆宣传PPT模板
- 如何使用 Python 操作 Git 代码?GitPython 入门介绍
- 城市是否可以坐车到达问题
- Some notes for CLFS2017
- Listener--------监听器
- 当推荐系统遇上图学习:基于图学习的推荐系统最新综述
- java最少有多少线程_【并发编程】一个最简单的Java程序有多少线程?
- python读取math_怎么使用python安装math库?怎么用?
- Android8.1 MTK平台 截屏功能分析
- 在ionic这个框架下(Angular JS),对URL进行重写,过滤掉URL中的#号
- Java:MySQL5.5安装教程
- leetcode之逆波兰表达式
- OpenCV-特征提取与检测(03、自定义角点检测器)
- 安装webpack和webpack打包(此文转自Henery)
- 第十二届全国计算机化学学术会议,中国化学会第十二届全国天然有机化学学术会议通知(第二轮)...
- 安卓bochs安装linux教程,Ubuntu 14.04 LTS 安装和配置Bochs
- 如何在Windows下安装ReviewBoard
- 微信小程序开发入门(API)
- java flag 用法_Java中一些常用的方法
- amazon.设计1. tic tac toe
热门文章
- python权限不够cmd安装不了_python环境配置+matplotlib
- 使用setCustomView建立标题居中的自定义ActionBar
- Bootstrap研究2-布局系统杂记
- PHP mysql_real_escape_string() 函数防止数据库攻击
- Spring Cloud Gateway 原理与应用场景
- Spring Boot 实现微信小程序订阅模板消息
- 服务器机械硬盘国产厂家,盘点服务器国产化呼声背后的优秀厂商
- SpringBoot整合kafka之kafka分区实战
- maven中的module及聚合项目
- POJ-1260 Pearls---DP