「SDOI2014」数数 解题报告

「SDOI2014」数数

题目描述

我们称一个正整数 \(N\) 是幸运数,当且仅当它的十进制表示中不包含数字串集合 \(S\) 中任意一个元素作为其子串。
例如当 \(S=(\)22, 333, 0233\()\) 时,233 是幸运数,2333202333223 不是幸运数。

给定 \(N\)\(S\),计算不大于 \(N\) 的幸运数个数。

输入格式

输入的第一行包含整数 \(N\)
接下来一行一个整数 \(M\),表示 \(S\) 中元素的数量。 接下来 \(M\) 行,每行一个数字串,表示 \(S\) 中的一个元素。

输出格式

输出一行一个整数,表示答案模 \(10^9+7\) 的值。

数据范围与提示

我们以 \(l\) 表示 \(N\) 的长度,\(L\) 表示 \(S\) 中所有串长度之和。
对于所有数据,\(1 \leq l \leq 1200 ,\ 1 \leq M \leq 100 ,\ 1 \leq L \leq 1500\)


关于多子串的东西可以想到AC自动机,可以在上面dp。

\(dp_{i,j,0/1}\)代表\(i\sim n\)位数字目前在AC自动机上匹配到节点\(j\)是否有最高位限制。

最后一位可以像数位dp那样非常简单的转移,有个坑点是\(S\)中有前导\(0\),但是\(N\)中没有。

有一种简单的处理方法是在建完AC自动机后把边\(ch[root][0]\)删掉


Code:

#include <cstdio>
#include <cstring>
const int mod=1e9+7;
const int N=1520;
inline void add(int &x,int y){x=x+y>=mod?x+y-mod:x+y;}
char s[N],t[N];
int ch[N][10],endro[N],fail[N],tot,q[N],l=1,r,bit[N],dp[N][N][2];
void ins()
{scanf("%s",s+1);int n=strlen(s+1),now=0;for(int i=1;i<=n;i++){if(!ch[now][s[i]-'0']) ch[now][s[i]-'0']=++tot;now=ch[now][s[i]-'0'];}endro[now]=1;
}
void build()
{for(int i=0;i<10;i++)if(ch[0][i])q[++r]=ch[0][i];while(l<=r){int now=q[l++];for(int i=0;i<10;i++){if(ch[now][i]) fail[q[++r]=ch[now][i]]=ch[fail[now]][i];else ch[now][i]=ch[fail[now]][i];}}ch[0][0]=0;
}
int main()
{scanf("%s",t+1);int n=strlen(t+1),m;for(int i=1;i<=n;i++) bit[i]=t[n+1-i]-'0';scanf("%d",&m);for(int i=1;i<=m;i++) ins();build();dp[n+1][0][1]=1;for(int i=n+1;i>1;i--)for(int j=0;j<=tot;j++)for(int l=0;l<=1;l++)for(int k=0,u=l?bit[i-1]:9;k<=u;k++){int to=ch[j][k];if(!endro[to]) add(dp[i-1][to][l&k==bit[i-1]],dp[i][j][l]);}int ans=mod-1;for(int i=0;i<=tot;i++) add(ans,dp[1][i][0]),add(ans,dp[1][i][1]);printf("%d\n",ans);return 0;
}

2019.2.21

转载于:https://www.cnblogs.com/butterflydew/p/10411119.html

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

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

相关文章

pymssql mysql_Python利用pymssql访问mysql数据库

#codingutf8#!/usr/bin/env python#-------------------------------------------------------------------------------# Name: pymssqlTest.py# Purpose: 测试 pymssql库&#xff0c;该库到这里下载&#xff1a;http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql## Author…

调查内存泄漏第1部分–编写泄漏代码

前几天&#xff0c;我发现了这个小问题&#xff1a;该服务器运行了一段时间&#xff0c;然后掉下来了。 然后通过启动脚本重新启动&#xff0c;整个过程重复进行。 这听起来并不那么糟糕&#xff0c;尽管对数据的损失很大&#xff0c;但对业务的重要性并不重要&#xff0c;因此…

js正整数正则表达式

function testNumber(){ var yourinputValue$("#yourinputId").val();var reg /^[1-9]\d*$/;alert(reg.test(yourinputValue))} 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

python打印网页成pdf_vue中将网页打印成pdf

点击下载PDFimport html2canvas from html2canvasimport JSPDF from jspdfexport default {name: home,components: {chead},data () {return {msg: home}},methods: {getPdf: () > {let pdfDom document.querySelector(#home)html2canvas(pdfDom, {onrendered: function (…

[NOIP2013]火柴排队

嘟嘟嘟 首先可以想到&#xff0c;最小距离一定是a中第 i 大的和b中第 i 大的在同一行。 然后先把a&#xff0c;b分别离散化&#xff0c;然后开一个标记数组&#xff0c;map[i]记录a中第 i 小的数在哪一个位置出现&#xff0c;然后对b数组处理一遍。 题中说交换次数&#xff0c;…

.net core 上传文件大小限制 webconfig

<?xml version"1.0" encoding"utf-8"?><configuration> <location path"." inheritInChildApplications"false"> <system.webServer> <handlers> <add name"aspNetCore" path"*&qu…

python标准日期正则表达式_Python 正则表达式验证传统日期

Pure regular exprssion(?x)(?:(?#dd/mm)(3[0-1]|[12][0-9]|0?[0-9])/(1[0-2]|0?[1-9])|(?#mm/dd)(1[0-2]|0?[1-9])/(3[0-1]|[12][0-9]|0?[0-9]))/(?#yy or yyyy)(?:[0-9]{2})?[0-9]{2}Regex with procedural codedef dateCheck(sDate):import redaysinmonth (31, …

Orika:将JAXB对象映射到业务/域对象

这篇文章着眼于使用Orika将JAXB对象映射到业务域对象。 本月初&#xff0c; 我使用基于反射的Dozer讨论 了相同的映射用例 。 在本文中&#xff0c;我假设需要映射相同的示例类&#xff0c;但是它们将使用Orika而不是Dozer进行映射 。 Dozer和Orika旨在解决相同类型的问题&…

es6 语法 (函数扩展)

//函数参数默认值(more值后不能有参数) {function test(x,y world){console.log(默认值,x,y); }test(hello);// hello worldtest(hello,kill); //hello kill } //作用域概念 {let x test;function test2(x,y x){console.log(作用域,x,y);}test2(); // undefined undefined…

python递归必须要有_python如何递归生成树?

好像比較懂你的意思了, 試寫了一個 Tree, 不知道你覺得怎麼樣XDclass Tree:def __init__(self, name):self.name nameself.children {}def __iter__(self):return iter(self.children)def __str__(self):return self.namedef __repr__(self):return Tree("{}").for…

2018秋季C语言学习总结

转载于:https://www.cnblogs.com/noacgnnolife/p/10413255.html

java取非_java运算符 与()、非(~)、或(|)、异或(^)

1.位异或运算(^)运算规则是&#xff1a;两个数转为二进制&#xff0c;然后从高位开始比较&#xff0c;如果相同则为0&#xff0c;不相同则为1。比如&#xff1a;8^11.8转为二进制是1000&#xff0c;11转为二进制是1011.从高位开始比较得到的是&#xff1a;0011.然后二进制转为十…

JOOQ事实:从JPA批注到JOOQ表映射

JOOQ是一个简洁的框架&#xff0c;它解决了我在使用高级动态过滤查询时遇到的一个长期问题。 虽然Hibernate和JPA附带了一个有用的Criteria API&#xff08;我已经使用了很长一段时间&#xff09;&#xff0c;但是使用它们时所能做的却有一些可以理解的限制。 例如&#xff0c;…

解决Charles手机安装SSL证书后,获取到的接口为unknown,且乱码问题

按照正常流程将Charles安装并设置代理后&#xff0c;手机添加完代理并安装SSL证书&#xff0c;尝试抓取接口时&#xff0c;获取到的接口为unknown且返回内容乱码&#xff0c;如下图所示 解决办法&#xff1a; 在Proxy-SSL Proxying Settings-SSL Proxying下添加想要抓取的服务地…

Sum of Even Numbers After Queries

Solution: 转载于:https://www.cnblogs.com/Julietma/p/10414394.html

python的颜色有哪些_Python颜色分类及格式

Python字符串颜色使用下面方式进行修改\033[显示方式;字体色;背景色m 字符串 \033[0m显示方式包括&#xff1a;0 终端默认设置1 高亮显示4 使用下划线5 闪烁7 反白显示8 不可见字体颜色 | 背景颜色 | 颜色描述-------------------------------------------3…

我们甚至没有进行包容性的讨论

科技行业需要更加包容女性和有色人种。 这是关于拥有最大的人才库以吸取卓越的经验。 可悲的是&#xff0c;大多数讨论&#xff0c;甚至是倡导更具包容性的文化讨论&#xff0c;本身都是分裂的。 我们都是个人 我们都是个人。 我们都有自己的优点和缺点。 我们都有自己一生以…

第一次连接mysql失败_MySQL 远程连接失败

解决服务器能登陆 MySQL &#xff0c; 远程账户不能链接问题。(第一次遇见还是挺蒙的)一、 配置文件执行顺序/etc/my.cnf/etc/mysql/my.cnf/usr/etc/my.cnf~/.my.cnf二、用户密码注 &#xff1a; 服务器 tx 云 &#xff0c; OS ubuntu 18.4。1、linux ssh 端口 22 登陆账号密码…

Python学习week7-文件操作

1、文件IO常用操作 # 文件操作命令 2、打开操作open # open(file, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone) 创建并打开一个文件test&#xff0c;然后关闭&#xff1b;打开一个文件&#xff0c;返回一个文件对象&#xff08;流对…

将一个实体转换成 Url 参数的形式 ?a=ab=b

function toQueryString(obj) { var ret []; for (var key in obj) { key encodeURIComponent(key); var values obj[key]; if (values && values.constructor Array) { //数组 var queryValues []; for (var i 0, len values.length, value; i < len; i ) …