3530: [Sdoi2014]数数

3530: [Sdoi2014]数数

链接

分析:

  对给定的串建立AC自动机,然后数位dp。数位dp的过程中,记录当前在AC自动机的哪个点上,保证不能走到出现了给定串的点。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL;inline int read() {int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
}const int N = 2005, mod = 1e9 + 7;
int ch[N][10], q[N], fail[N], last[N], val[N], dp[N][N], Index;
char s[N], t[N];void Insert(char *s) {int len = strlen(s), u = 0;for (int i = 0; i < len; ++i) {int c = s[i] - '0';if (!ch[u][c]) ch[u][c] = ++Index;u = ch[u][c];}val[u] = 1;
}
void bfs() {int L = 1, R = 0;for (int i = 0; i < 10; ++i) if (ch[0][i]) q[++R] = ch[0][i];while (L <= R) {int u = q[L ++];for (int c = 0; c < 10; ++c) {int v = ch[u][c];if (!v) ch[u][c] = ch[fail[u]][c];else fail[v] = ch[fail[u]][c], last[v] = val[fail[v]] ? fail[v] : last[fail[v]], q[++R] = v;}}
}
int dfs(int pos,int now,bool lim,bool fir) { // 从高位数第pos位,在AC自动机上的位置,是否有小于n的限制,是否有前导0的限制 if (pos == 0) return 1;if (!lim && !fir && dp[pos][now] != -1) return dp[pos][now];int res = 0, u = lim ? (s[pos] - '0') : 9;if (fir) res = (res + dfs(pos - 1, 0, lim && 0 == u, 1)) % mod; // 如果当前依然没有出现第一个正整数作为开始,那么继续从0号点开始走,不能是ch[0][0]!!! for (int i = fir; i <= u; ++i) {int v = ch[now][i];if (val[v] || last[v]) continue; // last表示从当前点沿着fail指针跳的过程中,第一个是给定串的点 res = (res + dfs(pos - 1, v, lim && i == u , 0)) % mod;}if (!lim && !fir) dp[pos][now] = res;return res;
}
int main() {scanf("%s", s + 1);int n = strlen(s + 1);reverse(s + 1, s + n + 1);int m = read();for (int i = 1; i <= m; ++i) {scanf("%s", t);Insert(t);}bfs();memset(dp, -1, sizeof(dp));cout << (dfs(n, 0, 1, 1) - 1 + mod) % mod;return 0;
}

 

转载于:https://www.cnblogs.com/mjtcn/p/10526404.html

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

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

相关文章

阿里云日志添加要查询字段

第一步&#xff1a;在API基控制器&#xff08;base文件下&#xff09;下面 $arr 就是我要接受的所有参数值&#xff0c;而 msg_id就是我以后要在阿里云日志中查询的字段&#xff0c;以此字段统计某些数据 $arr 是前台API接口传过来的数据 &#xff0c;这里我需要使用 $arr[id] …

总理整节从事量化交易员所做工作与代码

数据获取&#xff08;期权数据&#xff09; 本人从事领域为量化期权领域&#xff08;皇冠上的明珠&#xff0c;真好听&#xff0c;可是做起来&#xff0c;难度真是&#xff08;滴-------------&#xff09;&#xff09;。从最开始的手动从三大所复制粘贴期权数据&#xff0c;到…

Docker 上安装、启动 MySQL (图解)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 在docker仓库中搜索mysql的镜像&#xff1a; docker search mysql 下载镜像&#xff1a; docker pull mysql 2. 查看本地镜…

关于 std::set/std::map 的几个为什么

2013-01-20 std::set/std::map &#xff08;以下用 std::map 代表&#xff09; 是常用的关联式容器&#xff0c;也是 ADT&#xff08;抽象数据类型&#xff09;。也就是说&#xff0c;其接口&#xff08;不是 OO 意义下的 interface&#xff09;不仅规定了操作的功能&#xff…

HDU 3572 Task Schedule

传送门 作业调度&#xff0c;这道题还真没想到能用网络流。。。。乍一看跟背包问题差不多。 有N个作业&#xff0c;M个机器&#xff0c;每个作业给你一个耗费时间&#xff08;时间段&#xff09;以及最早开始时间和最晚完成时间&#xff08;这两个是时间点&#xff09;&#xf…

MariaDB安装1,2

2019独角兽企业重金招聘Python工程师标准>>> 4.22 MariaDB安装 MariaDB是MySQL的一个分支。MySQL——>sun——>Oracle&#xff0c;维基百科&#xff1a;https://en.wikipedia.org/wiki/MariaDB 官网&#xff1a;https://mariadb.org MariaDB 10.3.11Linux64位…

CentOS 7 上 Docker 安装

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Docker支持以下的CentOS版本&#xff1a; CentOS 7 (64-bit)CentOS 6.5 (64-bit) 或更高的版本前提条件 目前&#xff0c;CentOS 仅发…

python画图(散点图,折线图)

判断小数点几位 先将浮点数转化为字符串&#xff0c;然后截取小数点右边的字符&#xff0c;在使用len函数。 x3.25 len(str(x).split(".")[1]) 绘制散点图 #需导入要用到的库文件 import numpy as np # 数组相关的库 import matplotlib.pyplot as plt # 绘图库 N …

pyqt 不规则形状窗口显示

#codingutf-8 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPixmap, QPainter, QBitmap, QCursor import PyQt5.QtCore as QtCoreclass PixWindow(QWidget): # 不规则窗体def __init__(self):super()…

【英语-刘晓艳-词汇】词汇06

【第一部分&#xff1a;回顾前 5 节单词】 【第二部分&#xff1a;新单词】 A. vivid 补充&#xff1a;viv 生存 revive     survive &#xff08;sur surface&#xff0c;surpass &#xff09; B. bright 20. When I read the newspaper, I always read the ___ first. A…

C/C++拾遗录--关于一个C语言小程序的分析

虽然编了几年程序&#xff0c;但是对于程序到底是什么规则变成汇编代码的&#xff0c;在这里搞了一个小程序。用VC查看了一下汇编代码。在此之前先介绍一下关于函数运行是堆栈变化的细节。 在高级语言编写程序时&#xff0c;函数的调用是很常见的事情&#xff0c;但是在函数调…

保存tushare所有股票数据,并对涨停进行分析

import tushare as ts import pandas as pd import time import os import datetime # 指定自己要存放文件的绝对路径 os.chdir(E:/) pd.set_option(expand_frame_repr, False) now_time datetime.date.today() # 从tushare获取指定日期 def get_today_all_ts(date):date_now …

重命名 docker 容器名

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 docker 容器&#xff08;服务&#xff09;重命名只要一个命令就可以&#xff1a;docker rename 原容器名 新容器名 如&#xff1a;

vim编辑器常用命令总结

在命令状态下对当前行用 &#xff08;连按两次&#xff09;, 或对多行用n&#xff08;n是自然数&#xff09;表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n排版&#xff0c;相当于一般IDE里的code format。使用ggG可对整篇代码进行排版。 vim 选择文本&…

java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询

1、前缀查询&#xff08;prefix&#xff09; //prefix前缀查询Testpublic void test15() throws UnknownHostException {//1、指定es集群 cluster.name 是固定的key值&#xff0c;my-application是ES集群的名称Settings settings Settings.builder().put("cluster.name&…

tushare查看a股是否跌到位

#%%#获取上证指数历史行情数据#获取上证指数历史行情数据 import tushare as ts import pandas as pd # 设置token&#xff0c;只需要在第一次调用或者token失效时设置 # 设置完成后&#xff0c;之后就不再需要这一个命令了 ts.set_token() pro ts.pro_api() df_daily pro.in…

为什么我要转载文章?

在csdn上很多年&#xff0c;学习了许多&#xff0c;也教了人许多&#xff0c;但最近&#xff0c;大家发现&#xff0c;我转载了大量文章&#xff0c;而很少原创文章&#xff0c;真正的有水平且自己一个字一个字敲键盘出来的&#xff0c;1000字要三四个小时&#xff0c;如果包含…

Docker 从Dockerfile 构建镜像 :build 命令的用法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Dockerfile 创建完成后&#xff0c;可以使用 docker build 命令根据 Dockerfile 构建一个镜像。 1. 首先准备好 Dockerfile : 2. 执行构…

(翻译).NET应用架构

.NET应用架构 Kalyan Bandarupalli著&#xff0c;hystar翻译 这个系列文章将帮助.NET开发人员与架构师使用最新的.NET技术设计高效的.NET应用。关于应用架构这方面虽然已有很多文章与书籍&#xff0c;但是对于设计人员理解应用设计的最佳的原则与实践仍然是具有挑战性的。这篇…

activity idea编写bpmn流程文件

idea 的bpmn插件支持不好&#xff0c;1、画流程图&#xff0c;注意排他网关流程的条件&#xff0c;2、复制一份xml文件出来&#xff0c;头部替换&#xff1a;<?xml version"1.0" encoding"UTF-8"?> <definitions xmlns"http://www.omg.org…