#P0787. [HNOI2008] GT考试

news2024/9/21 22:52:30

题目描述

阿申准备报名参加 GT 考试,准考证号为 NN 位数X_1,X_2…X_n(0\le X_i\le9)X1​,X2​…Xn​(0≤Xi​≤9),他不希望准考证号上出现不吉利的数字。 他的不吉利数字A_1,A_2…A_m(0\le A_i\le 9)A1​,A2​…Am​(0≤Ai​≤9) 有 MM 位,不出现是指 X_1,X_2…X_nX1​,X2​…Xn​ 中没有恰好一段等于 A_1,A_2…A_mA1​,A2​…Am​,A_1A1​ 和X_1X1​ 可以为 00

输入格式

第一行输入N,M,K.接下来一行输入M位的数。

输出格式

阿申想知道不出现不吉利数字的号码有多少种,输出模 KK 取余的结果。

输入数据 1

4 3 100
111

Copy

输出数据 1

81

Copy

提示

N\leq10^9,M\leq20,K\leq1000N≤109,M≤20,K≤1000

代码:

#include <iostream>
#include <cstring>
using namespace std;

const int N = 1e9 + 10, M = 30;
int n, m, P;
char s[M];
int ne[M], c[M][M], f[M][M];

void mult(int a[][M], int b[][M]) {
  static int res[M][M];
  memset(res, 0, sizeof res);
  for (int i = 0; i < m; i++)
    for (int j = 0; j < m; j++)
      for (int k = 0; k < m; k++)
        // 注意这里的乘法要写为b * a,因为我们要求mult(f, c),实际上是矩阵c乘以矩阵f
        res[i][j] = (res[i][j] + b[i][k] * a[k][j]) % P;
  for (int i = 0; i < m; i++)
    for (int j = 0; j < m; j++) a[i][j] = res[i][j];
}

void fast_pow(int n) {
  // 注意这里我们将f向量横向扩展为了f矩阵,最终答案只需考虑第0列即可
  f[0][0] = 1;
  while (n) {
    if (n & 1) mult(f, c);
    n >>= 1;
    mult(c, c);
  }
}

int main() {
  scanf("%d%d%d", &n, &m, &P);
  scanf("%s", s + 1);
  for (int i = 2, j = 0; i <= m; i++) {
    while (j && s[i] != s[j + 1]) j = ne[j];
    if (s[i] == s[j + 1]) j++;
    ne[i] = j;
  }

  for (int j = 0; j < m; j++)
    for (char ch = '0'; ch <= '9'; ch++) {
      int k = j;
      while (k && s[k + 1] != ch) k = ne[k];
      if (s[k + 1] == ch) k++;
      if (k < m) c[k][j]++;
    }

  fast_pow(n);
  int res = 0;
  for (int i = 0; i < m; i++) res = (res + f[i][0]) % P;
  printf("%d\n", res);
}

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

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

相关文章

重生之再学mysql-数据库三范式

数据库三范式 介绍第一范式&#xff1a;确保每列都是不可拆分的第二范式&#xff1a;在第一范式的基础上&#xff0c;确保非主键列完全依赖于主键&#xff0c;而不是依赖于主键的一部分第三范式&#xff1a;第二范式的基础上&#xff0c;确保非主键列不存在传递依赖 介绍 什么…

“可以黑掉整个宇宙”的Metasploit Framework

0x01、 简述 Metasploit Framework(MSF)是一款开源安全漏洞检测工具&#xff0c;他带有数千个已知的软件漏洞&#xff0c;目前人在持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程&#xff0c;被安全社区冠以“可以黑掉整个宇宙”之名。在普通的…

Nginx最佳实践优化(动静分离、资源压缩、负载均衡、黑白名单等等)

一、前言 Nginx是目前负载均衡技术中的主流方案&#xff0c;几乎绝大部分项目都会使用它&#xff0c;Nginx是一个轻量级的高性能HTTP反向代理服务器&#xff0c;同时它也是一个通用类型的代理服务器&#xff0c;支持绝大部分协议&#xff0c;如TCP、UDP、SMTP、HTTPS等。 二、…

4.3. 重载和重写的区别

重载就是同样的一个方法能够根据输入数据的不同&#xff0c;做出不同的处理 重写就是当子类继承自父类的相同方法&#xff0c;输入数据一样&#xff0c;但要做出有别于父类的响应时&#xff0c;你就要覆盖父类方法 重载&#xff1a; 发生在同一个类中&#xff08;或者父类和子…

Python入门【函数用法和底层分析、函数简介 、函数的定义和调用、形参和实参、文档字符串(函数的注释) 、函数也是对象,内存底层分析】(十)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

一文让你知道等保测评以及渗透测试的区别与联系

我国等保政策已经严格落地执行&#xff0c;不少企业准备办理过等保。但大家对于等保相关政策不是很了解&#xff0c;例如傻傻分不清楚等保测评和渗透测试&#xff0c;这里一文让你知道等保测评以及渗透测试的区别与联系&#xff0c;仅供参考哦&#xff01; 等保测评以及渗透测试…

SpringBoot 项目使用 Redis 对用户 IP 进行接口限流

一、思路 使用接口限流的主要目的在于提高系统的稳定性&#xff0c;防止接口被恶意打击&#xff08;短时间内大量请求&#xff09;。 比如要求某接口在1分钟内请求次数不超过1000次&#xff0c;那么应该如何设计代码呢&#xff1f; 下面讲两种思路&#xff0c;如果想看代码可…

记一次Apache HTTP Client问题排查

现象 通过日志查看&#xff0c;存在两种异常情况。第一种&#xff1a;开始的时候HTTP请求会报超时异常。 762663363 [2023-07-21 06:04:25] [executor-64] ERROR - com.xxl.CucmTool - CucmTool|sendRisPortSoap error,url:https://xxxxxx/realtimeservice/services/RisPort o…

【NodeJs】如何将Markdown文件生成HTML文件在线浏览

经常用的编辑器是Markdown&#xff0c;有自带预览排版效果功能的&#xff0c;预览的是HTML网页&#xff0c;如果想要将它转换成HTML网页文件&#xff0c;要怎么做呢。 首先&#xff0c;借助Node的插件来做&#xff0c;在使用前&#xff0c;确保电脑已安装了NodeJS应用&#xf…

git本地库和远程库的相关操作命令

目录 一、分支概念&#xff1a; 二、 本地库分支管理&#xff1a; 1. 查看分支情况&#xff1a; 命令1&#xff1a;git branch 2. 新建分支 命令1&#xff1a; git branch <分支名> 命令2&#xff1a; git branch <新建分支名> <源分支名> 命令3&…

【温故而知新】【中间件】Redis为什么这么快?

时间&#xff1a;2023年07月27日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 【温故而知新】【中间件】Redis为什么这么快&#xff1f;_小蒋聊技术_免费在线阅读收听下载 - 喜马拉雅欢迎收听小蒋聊技术的类最新章节声音“【温…

【渗透测试】PNG图片隐藏部分恢复

1、图片原尺寸还原方法一 缺点就是有点慢&#xff0c;毕竟遍历的次数比较多 import binascii import struct import sysfilename sys.argv[1] crcbp open(filename, "rb").read() # 打开图片 crc32frombp int(crcbp[29:33].hex(), 16) # 读取图片中的CRC校验值 …

【密码学】三、AES

AES 1、AES产生2、数学基础2.1有限域GF(2^8^)2.1.1加法运算2.1.2乘法运算2.1.3x乘运算2.1.4系数在GF(2^8^)上的多项式 3、AES算法描述3.1字节代换3.2行移位3.3列混合3.4轮密钥加3.5密钥扩展 1、AES产生 征集AES算法的活动&#xff0c;目的是确定一个非保密的、公开的、全球免费…

Cesium态势标绘专题-直角箭头(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

国产化 | 记一次基于达梦创建数据库模式思考过程

开篇 首先&#xff0c;我们先来了解一下达梦数据库中用户与模式的概念&#xff0c;以及用户与模式之间的关系。 用户&#xff1a;主要是用来登录连接数据库&#xff0c;以及操作数据库对象等等。 模式&#xff1a;数据库中相关对象的集合。 关系&#xff1a;用户&#xff0…

测评7大热门订房APP,用好结尾这三点,分分钟帮你省掉好多钱

出去旅行预订酒店的时候&#xff0c;相信大家都有过纠结&#xff0c;那么多订房渠道到底应该选哪家。难道要把每个APP都下载下来试一遍吗&#xff1f; 所以&#xff0c;今天笔者给大家带来各大订房APP的测评。 先说结论&#xff1a;仅从性价比来看&#xff0c;民宿优于酒店&a…

Cesium态势标绘专题-燕尾箭头(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

LeetCode | Bit Manipulation, heap | 190. 191. 136. 137. 201.215.

190. Reverse Bits 191. Number of 1 Bits 一个一个数就行了。比较简单。 136. Single Number XOR的点在于&#xff0c;两个一样的数字a^a&#xff0c;结果是0. 且XOR是可以换位置的&#xff0c;所以把所有东西XOR在一起&#xff0c;剩下的就是单呗的。 137. Single Number I…

Python GDAL为具有多个波段的大量栅格图像绘制像素随时间变化走势图

本文介绍基于Python中的gdal模块&#xff0c;对大量长时间序列的栅格遥感影像文件&#xff0c;绘制其每一个波段中、若干随机指定的像元的时间序列曲线图的方法。 在之前的文章Python中GDAL批量绘制多时相栅格遥感影像的像元时间序列曲线图&#xff08;https://blog.csdn.net/z…

wireshark导出H264裸流

导出H264裸流 安装wireshark下载rtp_h264_extractor.lua脚本配置lua脚本重启wireshark筛选 安装wireshark 下载抓包工具&#xff1a;首先&#xff0c;您需要下载并安装一个网络抓包工具&#xff0c;例如Wireshark&#xff08;https://www.wireshark.org&#xff09;或tcpdump&…