[SDOI2014]数数
题解:
做过ac自动机上dp的这题应该就很容易想到了
首先在ac自动机上搞dp
表示当前考虑了i位,在自动机的j位上
然后转移就可以了
考虑限制
显然是一个数位dp
考虑位数小于n显然满足要求
考虑位数等于n
令f[i][j][0/1]表示前i位,自动机j上,与限制是否重合 然后枚举转移就行了
另外就是对于位数比它少的再做一次(否则的话有前导零可能会让答案变小)
代码:
#include <bits/stdc++.h>
using namespace std;
#define N 2000
#define mo 1000000007
char cc[N];
int x1[N],x2[N],c[][],val[],fail[];
int dp[][][],cnt;
bool tt=;
void insert(char *cc)
{
int len=strlen(cc),now=;
for (int i=;i<len;i++)
{
int v=cc[i]-'';
if (!c[now][v]) c[now][v]=++cnt;
now=c[now][v];
}
val[now]=;
}
queue<int> q;
void build()
{
for (int i=;i<=;i++)
if (c[][i]) fail[c[][i]]=,q.push(c[][i]);
while (!q.empty())
{
int u=q.front(); q.pop();
for (int i=;i<=;i++)
{
if (c[u][i])
{
fail[c[u][i]]=c[fail[u]][i];
q.push(c[u][i]);
} else c[u][i]=c[fail[u]][i];
val[c[u][i]]|=val[c[fail[u]][i]];
}
}
}
void plus2(int &x,int y)
{
x+=y;
x=x%mo;
}
bool pd(int x,int y)
{
if(x==&&y==) return(false);
else return(true);
}
int main()
{
freopen("noi.in","r",stdin);
freopen("noi.out","w",stdout);
std::ios::sync_with_stdio(false);
cin>>cc;
int n,m,len=strlen(cc);
n=len;
for (int i=;i<len;i++)
x1[i]=cc[i]-'';
cin>>m;
for (int i=;i<=m;i++)
{
cin>>cc;
insert(cc);
}
build();
dp[][][]=;
for (int i=;i<=n-;i++)
for (int j=;j<=cnt;j++)
// if (dp[i][j])
{
for (int k=;k<=;k++)
if (!val[c[j][k]]&&(pd(i,k)))
plus2(dp[i+][c[j][k]][],dp[i][j][]);
for (int k=;k<=x1[i]-;k++)
if (!val[c[j][k]]&&(pd(i,k)))
plus2(dp[i+][c[j][k]][],dp[i][j][]);
if (!val[c[j][x1[i]]])
plus2(dp[i+][c[j][x1[i]]][],dp[i][j][]);
}
int ans=;
for (int i=;i<=cnt;i++)
plus2(ans,dp[n][i][]),plus2(ans,dp[n][i][]);
memset(dp,,sizeof(dp));
dp[][][]=;
for (int i=;i<=n-;i++)
for (int j=;j<=cnt;j++)
{
for (int k=;k<=;k++)
if (!val[c[j][k]]&&(pd(i,k)))
plus2(dp[i+][c[j][k]][],dp[i][j][]);
}
for (int i=;i<=n-;i++)
for (int j=;j<=cnt;j++)
plus2(ans,dp[i][j][]);
cout<<ans;
return ;
}
[SDOI2014]数数的更多相关文章
- 【BZOJ】【3530】【SDOI2014】数数
AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...
- BZOJ3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 322 Solved: 188[Submit][Status] ...
- 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 682 Solved: 364 Description 我们称一 ...
- BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]
3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...
- 「SDOI2014」数数 解题报告
「SDOI2014」数数 题目描述 我们称一个正整数 \(N\) 是幸运数,当且仅当它的十进制表示中不包含数字串集合 \(S\) 中任意一个元素作为其子串. 例如当 \(S=(\)22, 333, 0 ...
- 3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 链接 分析: 对给定的串建立AC自动机,然后数位dp.数位dp的过程中,记录当前在AC自动机的哪个点上,保证不能走到出现了给定串的点. 代码: #include& ...
- [SDOI2014]数数 --- AC自动机 + 数位DP
[SDOI2014]数数 题目描述: 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串. 例如当S=(22,333,0233)时,233是幸运数,2333 ...
- bzoj [Sdoi2014]数数 AC自动机上dp
[Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1264 Solved: 636[Submit][Status][Discu ...
- [Sdoi2014]数数[数位dp+AC自动机]
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 834 Solved: 434[Submit][Status][ ...
- [bzoj3530][Sdoi2014]数数_AC自动机_数位dp
数数 bzoj-3530 Sdoi-2014 题目大意:给你一个整数集合,求所有不超过n的正整数,是的它的十进制表示下不能再一段等于集合中的任意数. 注释:$1\le n \le 1200$,$1\l ...
随机推荐
- ECharts(中国地图)的使用 及 非空 tooltip formatter 验证
中国地图使用频率很高下载文件: echarts.min.js网址: http://echarts.baidu.com/download.html点击: ...
- C++中模板的使用
为什么使用模板: C++重载(overloading),重载函数一般含有不同的参数个数或不同的参数类型.如果使用MAX函数对不同类型的求最大值,就要定义不同的重载函数: int max(int x,i ...
- Java EE之Form的get与post方法
Form表单中method="post/get'的区别 Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生 ...
- ABAP知识点笔记
1,获取光标所在行 READ TABLE TD_ALV_DATA INTO TH_ALV_DATA INDEX RS_SELFIELD-TABINDEX. 2,获取alv可编辑单元格内容 DATA: ...
- C - Least Crucial Node
题目链接:https://cn.vjudge.net/contest/247936#problem/C 具体大意:给你起点和中点,总点数,边数.求到终点的最小割点. 具体思路:可以用tarjan算法来 ...
- DSO windowed optimization 公式
这里有一个细节,我想了很久才想明白,DSO 中的 residual 联系了两个关键帧之间的相对位姿,但是最终需要优化帧的绝对位姿,中间的导数怎么转换?这里使用的是李群.李代数中的Adjoint. 参考 ...
- XML解析技术简介——(一)
- Struts局部异常与全局异常处理
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAowAAAG3CAIAAACxBJNyAAAgAElEQVR4nOy9z6tk15Ymdv4B0eRU8O
- ARMV8 Procedure Call Standard
1.前言 2. 术语说明 Term Note ABI Application Binary Interface 应用程序二进制接口 EABI Embedded ABI 嵌入式ABI PCS Pro ...
- CAS 策略已被 .NET Framework 弃用
背景 本来想这里有啥写的,就算了吧.突然看到dev了,我的天啊,这个.net大神,坑了多少开发人员了.功能太强大,以至于后来很长时间我都不知道jquery.当时为了操作dev,为了实现一个功能,都把官 ...