news 2026/2/22 8:38:05

《P3216 [HNOI2011] 数学作业》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《P3216 [HNOI2011] 数学作业》

题目描述

小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题:

给定正整数 n,m,要求计算 Concatenate(n)mod m 的值,其中 Concatenate(n) 是将 1∼n 所有正整数 顺序连接起来得到的数。

例如,n=13,Concatenate(n)=12345678910111213。小 C 想了大半天终于意识到这是一道不可能手算出来的题目,于是他只好向你求助,希望你能编写一个程序帮他解决这个问题。

输入格式

一行两个正整数 n,m。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1复制

13 13

输出 #1复制

4

说明/提示

【数据范围】

对于 30% 的数据,1≤n≤106;
对于 100% 的数据,1≤n≤1018,1≤m≤109。

  • 2023.4.20 添加一组 hack 数据。

代码实现:

#include<iostream> #include<cstring> using namespace std; unsigned long long n, mod, pow10[20]; struct mat { int m[105][105] = {}; mat() {memset(m,0,sizeof(m));} mat operator * (const mat b) { mat res; for(int i = 1;i <= 3;i++) for(int j = 1;j <= 3;j++) for(int k = 1;k <= 3;k++) { res.m[i][j] += 1ll * m[i][k] * b.m[k][j] % mod; res.m[i][j] %= mod; } return res; } void output() { for(int i = 1;i <= 3;i++) { for(int j = 1;j <= 3;j++) printf("%lld ",m[i][j]); printf("\n"); } } }; mat qpow(mat x, long long b) { mat res; for(int i = 1;i <= 3;i++) res.m[i][i] = 1; while(b) { if(b&1) res = res * x; x = x * x; b >>= 1; } return res; } int cnt_dig(long long x) { int cnt = 0; while(x) { cnt++; x /= 10; } return cnt; } int main() { pow10[0] = 1; for(int i = 1;i < 20;i++) pow10[i] = pow10[i-1] * 10ll; scanf("%lld%lld",&n,&mod); mat trans, res; for(int i = 1;i <= 3;i++) res.m[i][i] = 1; for(int i = 1;i <= cnt_dig(n);i++) { trans.m[1][2] = trans.m[2][2] = trans.m[2][3] = trans.m[3][3] = 1; trans.m[1][1] = pow10[i] % mod; if(i == 1) res = res * qpow(trans, min(n-pow10[i-1], pow10[i]-pow10[i-1]-1)); else res = qpow(trans, min(n-pow10[i-1]+1, pow10[i]-pow10[i-1])) * res; } printf("%lld",(res.m[1][1] + 2ll * res.m[1][2] + res.m[1][3]) % mod); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/18 22:28:31

AI大模型面试宝典:全面解析大模型技术,助你轻松应对各类面试问题

本文系统梳理了AI大模型开发技术的面试要点&#xff0c;涵盖增量预训练、知识蒸馏、推理加速等多个维度&#xff0c;并提供七阶段学习路线图及视频教程、电子书、面试题等资源&#xff0c;帮助程序员系统掌握大模型技术&#xff0c;提升面试竞争力。AI 大模型技术经过2025年的狂…

作者头像 李华
网站建设 2026/2/21 18:51:48

基于STM32单片机的温室大棚控制

目录 STM32单片机在温室大棚控制中的应用系统核心功能模块典型硬件设计方案软件控制逻辑实现低功耗优化策略系统扩展功能典型部署方案 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; STM32单片机在温室大棚控制中的应用 STM32单片机因…

作者头像 李华
网站建设 2026/2/3 8:25:12

基于STM32单片机的自动宠物喂食

目录 STM32单片机自动宠物喂食系统概述硬件组成软件功能电源管理扩展功能应用场景开发建议 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; STM32单片机自动宠物喂食系统概述 自动宠物喂食系统基于STM32单片机设计&#xff0c;可实现定…

作者头像 李华
网站建设 2026/2/21 19:28:38

基于stm32厨房一氧化碳烟雾浓度检测及火灾报警器的设计

目录硬件设计软件设计报警功能实现安全与可靠性源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;硬件设计 采用STM32F103C8T6作为主控芯片&#xff0c;搭配MQ-7一氧化碳传感器和MQ-2烟雾传感器。传感器通过ADC接口将模拟信号传输给STM32…

作者头像 李华
网站建设 2026/2/18 20:21:14

【kylin-Linux】Flash兼容插件包安装

[注意]Adobe Flash已在2020年底停止更新安装思路1.更换apt源2.更新软件源3.安装kylin-flash-plugin步骤1.更换软件源编辑sources.list文件&#xff0c;更换为你需要的源地址&#xff0c;网上有很多开源镜像站&#xff0c;具体自己去网络上寻找。sudo vim /etc/apt/sources.list…

作者头像 李华