bzoj 3530: [Sdoi2014]数数
#include<cstdio>
#include<iostream>
#include<cstring>
#define M 1509
#define MO 1000000007
#define ll long long
using namespace std;
char a[M];
int b[M],c[M],n,shu[M][],tot=,m,n1,fail[M],q[M],f[][][];
ll ans;
bool bo[M];
void dp(int a1)
{
for(int i=;i<=tot;i++)
for(int l=;l<=;l++)
{
if(bo[i]||!f[a1-][i][l])
continue;
for(int j=;j<=;j++)
{
int k=i;
for(;!shu[k][j];k=fail[k]);
f[a1][shu[k][j]][l+j>b[a1]]=(f[a1][shu[k][j]][l+j>b[a1]]+f[a1-][i][l])%MO;
if(!j)
f[a1][shu[k][j]][]=(f[a1][shu[k][j]][]+f[a1-][i][l])%MO;
}
}
return;
}
int main()
{
scanf("%s",a+);
n=strlen(a+);
for(int i=;i<=n;i++)
b[n-i+]=a[i]-'';
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%s",a+);
n1=strlen(a+);
for(int j=;j<=n1;j++)
c[n1-j+]=a[j]-'';
int now=;
for(int j=;j<=n1;j++)
if(shu[now][c[j]])
now=shu[now][c[j]];
else
{
shu[now][c[j]]=++tot;
now=tot;
}
bo[now]=;
}
for(int i=;i<=;i++)
shu[][i]=;
int h=,t=;
q[]=;
for(;h<t;)
{
h++;
int p=q[h];
for(int i=;i<=;i++)
if(shu[p][i])
{
q[++t]=shu[p][i];
int k=fail[p];
for(;!shu[k][i];k=fail[k]);
fail[shu[p][i]]=shu[k][i];
}
}
f[][][]=;
for(int i=;i<=n;i++)
dp(i);
for(int i=;i<n;i++)
for(int j=;j<=tot;j++)
if(!bo[j])
ans=(ans+(ll)f[i][j][]+f[i][j][]-f[i][j][])%MO;
for(int i=;i<=tot;i++)
if(!bo[i])
ans=(ans+f[n][i][]-f[n][i][])%MO;
printf("%lld\n",ans);
return ;
}
AC自动机上跑数位DP
bzoj 3530: [Sdoi2014]数数的更多相关文章
- BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]
3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...
- [BZOJ 3530] [Sdoi2014] 数数 【AC自动机+DP】
题目链接:BZOJ - 3530 题目分析 明显是 AC自动机+DP,外加数位统计. WZY 神犇出的良心省选题,然而去年我太弱..比现在还要弱得多.. 其实现在做这道题,我自己也没想出完整解法.. ...
- bzoj 3530: [Sdoi2014]数数 数位dp
题目 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运数. ...
- BZOJ 3530 [SDOI2014]数数 (Trie图/AC自动机+数位DP)
题目大意:略 裸的AC自动机+数位DP吧... 定义f[i][x][0/1]表示已经匹配到了第i位,当前位置是x,0表示没到上限,1到上限,此时数是数量 然而会出现虚拟前导零,即前几位没有数字的情况, ...
- [BZOJ 3530][Sdoi 2014]数数
阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...
- 【BZOJ】【3530】【SDOI2014】数数
AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...
- 3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 链接 分析: 对给定的串建立AC自动机,然后数位dp.数位dp的过程中,记录当前在AC自动机的哪个点上,保证不能走到出现了给定串的点. 代码: #include& ...
- bzoj [Sdoi2014]数数 AC自动机上dp
[Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1264 Solved: 636[Submit][Status][Discu ...
- BZOJ3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 322 Solved: 188[Submit][Status] ...
随机推荐
- CSS样式表(三)
前端人员在学习开发过程中常用的CSS样式总结: [margin] margin 检索或设置对象四边的外延边距 margin-top 检索或设置对象顶边的外延边距 margin-right 检索或设置对 ...
- laravel的学习感受
学习laravel也有一段时间了自己感觉还是不怎么难就是自己的代码不熟悉所以很多的不怎么会.
- Spark HA实战
Spark HA需要安装zookeeper,推荐稳定版3.4.6. 1.下载zookeeper3.4.6,2.配置环境变量3.创建data logs4.vi conf/zoo.cfg5 data目录中 ...
- Winform MDI窗体容器 权限 简单通讯
MDI窗体容器 权限 using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...
- Dictionary<k,v>键值对的使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Dict ...
- 原创:Equinox OSGi应用嵌入Jersey框架搭建REST服务
一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Equinox OSGi应用嵌入Jersey框架搭建REST服务 1.新建插件工程HelloWebOSGI a. ...
- [Java] SoapUI使用Java获取各时间日期方法
import java.util.*; import java.text.SimpleDateFormat; // current date String dateNew = today() // t ...
- HADOOP命令介绍
一.用户命令1.archive命令 (1).什么是Hadoop archives?Hadoop archives是特殊的档案格式.一个Hadoop archive对应一个文件系统目录. Hadoop ...
- 只需一点小修改,HTC Vive画面会更清晰锐利
这里要先谢谢@NB81rkd0qB,他的那个帖子里其实很多碰到的问题都可以解决,但是目前有点乱,所以我这里斗胆整理一下,希望能帮助一下朋友们.第一步:我们要找到[steamvr.vrsettings] ...
- [HTML/HTML5]5 使用链接
5.1 添加指向其它Web页面的链接 无论目标Web页面是否属于你网站的一部分,还是属于其它网站,都可以添加指向其它Web页面的链接.只需要用<a>就可以添加链接. <a href ...