[BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)

Description

Input

Output

Sample Input

Sample Output

HINT

Source

Solution

  递推式长这样:$f[n]=f[n-1]*10^k+n$

  对于每一段位数个数相同的$n$(如$10\sim99,100\sim999,23333\sim66666,1018701389\sim2147483647$),$k$是个定值

  然后就可以开心地分段矩阵乘法了,剩下的自己推吧

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int mod;
 5 struct mat
 6 {
 7     ll a[4][4];
 8     int n, m;
 9  
10     mat()
11     {
12         memset(a, 0, sizeof(a));
13         n = 0, m = 0;
14     }
15  
16     mat(int x, int y)
17     {
18         memset(a, 0, sizeof(a));
19         n = x, m = y;
20     }
21  
22     mat operator* (const mat &rhs) const
23     {
24         mat ans;
25         ans.n = n, ans.m = rhs.m;
26         for(int i = 1; i <= n; ++i)
27             for(int j = 1; j <= rhs.m; ++j)
28                 for(int k = 1; k <= m; ++k)
29                     ans.a[i][j] = (ans.a[i][j] + a[i][k] * rhs.a[k][j]) % mod;
30         return ans;
31     }
32  
33     mat operator^ (ll rhs) const
34     {
35         mat ans(n, n), b = *this;
36         for(int i = 1; i <= n; ++i)
37             ans.a[i][i] = 1;
38         for(; rhs; rhs >>= 1, b = b * b)
39             if(rhs & 1) ans = ans * b;
40         return ans;
41     }
42 };
43  
44 int main()
45 {
46     ll n, c;
47     mat ans(1, 3), b(3, 3);
48     scanf("%lld%d", &n, &mod);
49     ans.a[1][3] = 1;
50     for(int i = 1; i <= 3; ++i)
51         for(int j = 1; j <= i; ++j)
52             b.a[i][j] = 1;
53     for(ll i = 10; ; i *= 10)
54     {
55         b.a[1][1] = i % mod;
56         if(i <= n) c = i / 10 * 9;
57         else c = n - i / 10 + 1;
58         ans = ans * (b ^ c);
59         if(i > n) break;
60     }
61     printf("%lld\n", ans.a[1][1]);
62     return 0;
63 }
View Code

 

转载于:https://www.cnblogs.com/CtrlCV/p/5668799.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HALCON示例程序texture.hdev检测树木

小哥哥小姐姐觉得有用点个赞呗&#xff01; HALCON示例程序texture.hdev检测树木 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_close_window () Interactive : 0 dev_close_window () read_image (MreutHill, ‘mreut_y’) get_image_size (MreutH…

1、python基础速成

基础模块 def prt(age,name):#函数定义 print("%s is %d 年龄 old"%(name,age)) if __name__"__main__":#程序入口 print("Hello World") prt(45,"gaici") 获取输入&#xff1a;使用input()函数 nameinput("you name &#x…

老男孩博客园杨海潮MySQL--MySQL机构逻辑2

转载于:https://blog.51cto.com/yanfeilai528/2103403

法国标致雪铁龙汽车公司采用通快碟片激光器进行焊接

发布日期&#xff1a;2011-10-14 来源&#xff1a;光电新闻网 发布人&#xff1a;星之球科技 摘要&#xff1a;3月11日消息&#xff0c;十一个碟片激光器&#xff08;disk laser&#xff09;将安装在标致雪铁龙集团的工厂&#xff0c;这家法国汽车制造商准备使用4千瓦的激光器…

HALCON示例程序vessel.hdev血管的分割与测量

小哥哥小姐姐觉得有用点个赞呗&#xff01; HALCON示例程序vessel.hdev血管的分割与测量 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_window (‘off’) dev_close_window () dev_open_window (0, 0, 512, 512, ‘black’, WindowID) set_d…

浙南联合训练赛20180414

这次题目的代码都不长&#xff0c;CF的一贯风格 A - Game CodeForces - 513A Two players play a simple game. Each player is provided with a box with balls. First players box contains exactly n1 balls and second players box contains exactly n2balls. In one move…

Gym 100090D Insomnia

从 n 变到 1&#xff0c;有多少种方案&#xff1f; 打表记忆化。 1 #include <bits/stdc.h>2 3 using namespace std;4 5 int n;6 int dp[1000005];7 int dfs(int n) {8 if(n1)9 return 1; 10 if(dp[n]>0) 11 return dp[n]; 12 int cnt0;…

IP/TCP/UDP/RTP/RTCP 包结构图

IP 包头结构: TCP 包头结构: UDP 包头结构: RTP 包头结构: RTCP 包头结构:

webservices系列(二)——JAX-WS文件上传下载

新建ImgData类&#xff0c;存放文件javabean DataHandler&#xff1a;使用这个类型存放文件 XmlRootElement(name"ImaData") XmlAccessorType(XmlAccessType.FIELD) public class ImgData {private Integer id;XmlMimeType("application/octet-stream")pri…

halcon sobel边缘检测sobel_amp

目录sobel_amp&#xff08;算子&#xff09;描述参数sobel_amp&#xff08;算子&#xff09; sobel_amp - 使用Sobel算子检测边缘&#xff08;幅度&#xff09;。 sobel_amp&#xff08;图片&#xff1a;边缘图像&#xff1a;滤波器方式&#xff0c;掩膜大小:) 描述 sobel_…

es中的一些知识点记录

1. forcemerge接口 强制段合并&#xff0c;设置为1时&#xff0c;是期望最终只有1个索引段。但实际情况是&#xff0c;合并的结果是段的总数会减少&#xff0c;但仍大于1&#xff0c;可以多次执行强制合并的命令。 设置的的目标值越小。合并消耗的时间会越久。 curl -XPOST htt…

通过border来实现各种三角符号

很长时间没有动笔了&#xff0c;最近学的东西很杂很乱&#xff01;又有点丢了西瓜捡芝麻&#xff0c;走马观花&#xff0c;瞻前顾后的感觉&#xff01; 因此&#xff0c;我决定一步步来&#xff0c;化繁为简&#xff0c;今天就从border入手。 很多时候我们都会需要一个三角形或…

MFC封装API

一、Win32Application Architecture 一个Win32 Application Architecture的代码结构如下&#xff1a; LRESULT CALLBACK WinWordsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); //定义回调处理消息函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPr…

4.10下午

转载于:https://www.cnblogs.com/yanyuying/p/6690662.html

halcon sobel 边缘检测 sobel_dir

目录sobel_dir&#xff08;算子&#xff09;描述参数sobel_dir&#xff08;算子&#xff09; sobel_dir - 使用Sobel算子检测边缘&#xff08;振幅和方向&#xff09;。 sobel_dir(Image : EdgeAmplitude, EdgeDirection : FilterType, Size : ) 描述 sobel_dir计算图像的一…

【译】x86程序员手册37-第10章 初始化

Chapter 10 Initialization 第10章 初始化 After a signal on the RESET pin, certain registers of the 80386 are set to predefined values. These values are adequate to enable execution of a bootstrap program, but additional initialization must be performed by s…

秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

本文将带领你与多线程作第一次亲密接触&#xff0c;并深入分析CreateThread与_beginthreadex的本质区别&#xff0c;相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别&#xff0c;在实际的编程中到底应该使用CreateThread还是…

如何传输文件到linux服务器?

我们知道&#xff0c;云主机文件传输是一件相对复杂的事情&#xff0c;经常需要搭建FTP服务器或者是借助其他工具来完成。下面为大家介绍一种简单易操作的传输文件到Linux服务器的方法。 Linux文件传输同Windows文件传输一样&#xff0c;我们为每一台Linux主机配置了一个1G的网…

秒杀多线程第三篇 原子操作 Interlocked系列函数

上一篇《多线程第一次亲密接触 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见&#xff0c;我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录&#xff0c;每个用户登录用一个…

PostgreSQL Oracle 兼容性之 - INDEX SKIP SCAN (递归查询变态优化) 非驱动列索引扫描优化...

标签 PostgreSQL , Oracle , index skip scan , 非驱动列条件 , 递归查询 , 子树 背景 对于输入条件在复合索引中为非驱动列的&#xff0c;如何高效的利用索引扫描&#xff1f; 在Oracle中可以使用index skip scan来实现这类CASE的高效扫描&#xff1a; INDEX跳跃扫描一般用在W…