题面

传送门

Sol

在AC自动机上跑数位DP
设\(f[i][j][0/1]\)表示到\(n的第i位\)当前匹配到\(AC自动机的j节点\)的方案
转移就在AC自动机上跑
注意不能有前导零,可能有这种情况\(000000\)不能存在那么前导零就有问题
所以要单独把小于\(n\)的位数的数单独算出来,等于\(n\)的位数的数单独算出来最后加起来

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int Zsy(1e9 + 7), _(1510);int n, m, ch[10][_], tot, fail[_], f[3][_][_], ans;
bool cnt[_];
char s[_], T[_];
queue <int> Q;IL void Insert(){RG int x = 0, len = strlen(s);for(RG int i = 0; i < len; ++i){if(!ch[s[i] - '0'][x]) ch[s[i] - '0'][x] = ++tot;x = ch[s[i] - '0'][x];}cnt[x] = 1;
}IL void GetFail(){for(RG int i = 0; i <= 9; ++i) if(ch[i][0]) Q.push(ch[i][0]);while(!Q.empty()){RG int fa = Q.front(); Q.pop();for(RG int i = 0; i <= 9; ++i)if(ch[i][fa]) fail[ch[i][fa]] = ch[i][fail[fa]], Q.push(ch[i][fa]);else ch[i][fa] = ch[i][fail[fa]];cnt[fa] |= cnt[fail[fa]];}
}IL void Calc(){f[1][0][0] = f[2][0][0] = 1;for(RG int i = 0; i < n; ++i)for(RG int j = 0; j <= tot; ++j){if(cnt[j]) continue;for(RG int l = 0; l <= 9; ++l){RG int p = ch[l][j];if(!(i + l) || cnt[p]) continue;(f[2][i + 1][p] += f[2][i][j]) %= Zsy;}}for(RG int i = 1; i < n; ++i)for(RG int j = 0; j <= tot; ++j)(ans += f[2][i][j]) %= Zsy;for(RG int i = 0; i < n; ++i)for(RG int j = 0; j <= tot; ++j){if(cnt[j]) continue;for(RG int l = 0; l <= 9; ++l){RG int p = ch[l][j];if(!(i + l) || cnt[p]) continue;(f[0][i + 1][p] += f[0][i][j]) %= Zsy;if(l + '0' == T[i + 1]) (f[1][i + 1][p] += f[1][i][j] % Zsy) %= Zsy;if(l + '0' < T[i + 1]) (f[0][i + 1][p] += f[1][i][j]) %= Zsy;}}
}int main(RG int argc, RG char* argv[]){scanf(" %s%d", T + 1, &m); n = strlen(T + 1);for(RG int i = 1; i <= m; ++i) scanf(" %s", s), Insert();GetFail(); Calc();for(RG int i = 0; i <= tot; ++i) (ans += (f[0][n][i] + f[1][n][i]) % Zsy) %= Zsy;printf("%d\n", ans);return 0;
}

转载于:https://www.cnblogs.com/cjoieryl/p/8320821.html

Bzoj3530: [Sdoi2014]数数相关推荐

  1. 【BZOJ3530】数数(SDOI2014)-AC自动机+数位DP

    测试地址:数数 做法:本题需要用到AC自动机+数位DP. 首先看到多模式串匹配,自然想到用AC自动机来做.用AC自动机构造出状态转移图后,令f(i,j,k)f(i,j,k)f(i,j,k)为匹配了最高 ...

  2. 「SDOI2014」数数 解题报告

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

  3. 3530: [Sdoi2014]数数

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

  4. 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 682  Solved: 364 Description 我们称 ...

  5. 【BZOJ3530】数数(AC自动机,动态规划)

    [BZOJ3530]数数(AC自动机,动态规划) 题面 BZOJ 题解 很套路的\(AC\)自动机+\(DP\) 首先,如果长度小于\(N\) 就不存在任何限制 直接大力\(DP\) 然后强制限制不能 ...

  6. 数数题(计数类 DP)做题记录

    数数题(计数类 DP)做题记录 CF1657E Star MST 我们称张无向完全图是美丽的当且仅当:所有和 \(1\) 相连的边的边权之和等于这张完全图的最小生成树的边权之和. 完全图点数为 \(n ...

  7. NOIP模拟测试29「爬山·学数数·七十和十七」

    爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左 ...

  8. CSDN挑战编程——《金色十月线上编程比赛第一题:小女孩数数》

    金色十月线上编程比赛第一题:小女孩数数 题目详情: [金色十月线上编程比赛规则] 一个小女孩正在用左手手指数数,从1数到n.她从拇指算作1开始数起,然后,食指为2,中指为3,无名指为4,小指为5.接下 ...

  9. python画海绵宝宝_《1,2,3到动物园》数数书,适合幼儿园小班宝宝亲子共读,从游戏中了解数字的概念...

    大家好,我是神桐妈妈,最近开始陆续给几个幼儿园做了有关绘本方面的师资培训,然后又有新的幼儿园要有了嵌入式幼儿园绘本馆,有了绘本,有了书香氛围,又有孩子们开始接触绘本,每天拿着一本绘本带回家,和爸爸或者 ...

  10. Linux系统编程:习题,父子进程通过信号通信,实现交替数数

    Linux练习题,父子进程通过信号通信,实现交替数数. 习题思路 父子进程交替发信号进行驱动从而实现数数,值得注意的是 不管是父进程或者子进程谁先发送信号 都会面临一个问题,另外一个进程的信号捕捉函数 ...

最新文章

  1. MATLAB常用函数, 常见问题
  2. 深入理解Spring AOP思想
  3. SQL Editor and reconnect【mysql(workbench)更新数据时候的一个异常】【Error Code:1175】
  4. 创建calico网络报错client response is invalid json
  5. dreamweaver 正则表达式为属性值加上双引号_PHP正则表达式核心技术完全详解 第2节...
  6. thinkphp 常用SQL执行语句总结
  7. this指向_前端必须知道的this指向问题
  8. 酒水饮料类零售库存管理软件app,哪个简单好用?看看这10款
  9. 排列图 - QCC小组活动推行知识系列介绍(三)
  10. qlistview 自定义控件,是否可以在QListView中添加自定义窗口小部件?
  11. C++11常见编译与链接错误解决总结
  12. php 监控网站是否宕机,利用网站监控随时知道网站宕机
  13. srs信道估计_SRS 上行信道质量测量
  14. 成都千锋培训python就业班
  15. 为App界面添加蒙层效果
  16. requests爬取豆瓣前250部高分电影
  17. 职场邮件的十大忌讳,你犯了吗?
  18. 百度砸金22亿背后,要打造一个“万亿”市值的“新”YY直播?
  19. 浅谈均值、方差、标准差、协方差的概念及意义
  20. adb disable-verity和adb remount的用法

热门文章

  1. SAP RETAIL 通过分配表创建UB STO单据
  2. SAP HUM 嵌套HU初探 IV
  3. 浅谈RPA 在银行领域的十个场景应用
  4. AI 崛起的第九个年头,还有哪些大有可为的地方?
  5. 方向:AI研究方向历史性转变!从机器学习到人类研究
  6. 吴恩达深度学习笔记(109)-循环神经网络模型(RNN介绍)
  7. 不知道这些AI术语,还敢说你很了解AI吗?
  8. 除了数据还是数据?2018年5大 AI (人工智能)预测
  9. 就业丨得益于AI,这五个行业岗位需求将呈现显著增长趋势
  10. 焦李成院士:进化优化与深度学习的思考