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] ...
随机推荐
- 115个Java面试题和答案——终极列表(上)
本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...
- 解决file_get_contents遇到中文文件名无法打开问题
利用file_get_contents打开文件或采集远程服务器文件如果文名或url中碰到汉字中文那么会出现failed to open stream:Lnvalid argument in错误. ...
- PS切图篇
一.PS界面设置 1.新建(ctrl+n) 初始化尺寸参数 预设:自定 宽度:1920px 高度:自设(如:2000px) 分辨率:72像素/英寸 颜色:RGB/8位 背景内容:透明 存储为预设 2. ...
- centos7 docker activemq
/ cd /home/activemq// wget http://apache.fayea.com/activemq/5.13.3/apache-activemq-5.13.3-bin.tar.gz ...
- 修复docker pull image failed
修复docker pull image failed docker pull报错 message":"Get https://n6-026-137.byted.org/v1/_pi ...
- Android Device Monitor工具的DDMS使用
Dalvik Debug Monitor Server(DDMS)是主要的Android调试工具之一 1.打开android studio->tools->android device m ...
- php : 基础(5)
函数 函数的定义: 形式: function 函数名 ( [$形参1] [,$形参2] [,.... ] ){ //函数体...... } 说明: 定义时使用的形参,其实就是一个变量--只能在该函数内 ...
- [Android] Google IAP unmaneged items服务器校验
android IAP unmaneged items 服务器校验 当成功IAP以后, 会在google服务器记录此次购买的状态. 可以通过Google Play Android Developer ...
- DuiLib 源码分析之解析xml类CMarkup & CMarkupNode cpp文件
时隔5个月才有时间接着写未完成的实现部分,也是惭愧呀 选几个关机的函数来解析,一些get方法就忽略掉吧 CMarkupNode 与 CMarkUp 互为友元类,CMarkUp 实现解析,CMarkup ...
- 自定义一个类似UIAlertView的弹出框
这个是和UIAlertView类似,但是可以自定义view的样式废话不多说,上代码: 首先第一步:创建一个继承自View的类如: #import <UIKit/UIKit.h> @clas ...