#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]数数的更多相关文章

  1. BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]

    3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...

  2. [BZOJ 3530] [Sdoi2014] 数数 【AC自动机+DP】

    题目链接:BZOJ - 3530 题目分析 明显是 AC自动机+DP,外加数位统计. WZY 神犇出的良心省选题,然而去年我太弱..比现在还要弱得多.. 其实现在做这道题,我自己也没想出完整解法.. ...

  3. bzoj 3530: [Sdoi2014]数数 数位dp

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

  4. BZOJ 3530 [SDOI2014]数数 (Trie图/AC自动机+数位DP)

    题目大意:略 裸的AC自动机+数位DP吧... 定义f[i][x][0/1]表示已经匹配到了第i位,当前位置是x,0表示没到上限,1到上限,此时数是数量 然而会出现虚拟前导零,即前几位没有数字的情况, ...

  5. [BZOJ 3530][Sdoi 2014]数数

    阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...

  6. 【BZOJ】【3530】【SDOI2014】数数

    AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...

  7. 3530: [Sdoi2014]数数

    3530: [Sdoi2014]数数 链接 分析: 对给定的串建立AC自动机,然后数位dp.数位dp的过程中,记录当前在AC自动机的哪个点上,保证不能走到出现了给定串的点. 代码: #include& ...

  8. bzoj [Sdoi2014]数数 AC自动机上dp

    [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1264  Solved: 636[Submit][Status][Discu ...

  9. BZOJ3530: [Sdoi2014]数数

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 322  Solved: 188[Submit][Status] ...

随机推荐

  1. freemaker时间格式转换,精确到毫秒

    在开发中,需要将时间以 2016-09-20 12:00:01:723 的形式里用freemaker展示在页面上,找了好久,终于找到了答案. "createTime":" ...

  2. dom节点的操作

    dom节点的操作 -- jQuery 内部插入 1.(结尾)append 方法 . appendto方法(为了方便链式操作) (开头)prepend方法           $('#div1').ap ...

  3. gbd基本使用一

    http://biancheng.dnbcw.info/linux/391846.html

  4. 如何在自己的窗体(控件)中显示XAF的视图

    Form form = new Form(); DevExpress.ExpressApp.View listView = Application.CreateListView(Application ...

  5. jQuery 学习笔记_01

    jQuery是一个简洁快速灵活的JavaScript框架,能让你在网页上简单的操作文档.处理事件.实现特效并为Web页面添加Ajax交互. 1 jQuery大多是基于 document 一个或多个元素 ...

  6. 被滥用的for in循环

    众所周知,javascript中有两种for循环,一种是: var a=['this','is','a','article'], i, len; for( i = 0,len = a.length;i ...

  7. C++11语法糖

    1.constexpr变量:声明为constexpr的变量一定是一个常量,新标准允许定义一种特殊的constexpr函数使得编译时就可计算结果,这样就能用constexpr函数去初始化constexp ...

  8. 参考__HTML5 Game

    基础知识 TypeScript TypeScript 目录教程 Egret Egret II HTML5晃动DeviceMotionEvent事件 博客 html5tricks 库和框架 html5t ...

  9. iOS 开发之使用safari对webview进行调试

    转自:http://www.tuicool.com/articles/ZBFnUbz 使用safari对webview进行调试 时间 2016-02-25 14:35:20  陈斌彬的技术博客 原文  ...

  10. zabbix3.0.4 部署之九 (zabbix3.0.4 Linux Agent安装)

    1.从官网现在源码镜像   http://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.2.1/zabbix-3. ...