[51nod1587]半现串
将s所有长度为d/2的子串放进ac自动机中,直接匹配就可以判定半现串了
再对其做一个差分,询问一个前缀的半现串个数,在ac自动机上数位dp,f[i][j][0/1]表示走了i步(i位的字符串),走到节点j,是否达到上限的方案数
对于ac自动机上的结束节点,直接重置并累计答案即可

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1005
4 #define c (s[i]-'0')
5 #define mod 1000000007
6 queue<int>q;
7 int V,n,d,ans,mi[51],mo[51],vis[N*50],nex[N*50],ch[N*50][11],f[51][N*50][2];
8 char s[N],s1[51],s2[51];
9 void add(int l,int r){
10 int k=0;
11 for(int i=l;i<=r;i++){
12 if (!ch[k][c])ch[k][c]=++V;
13 k=ch[k][c];
14 }
15 vis[k]=1;
16 }
17 void build(){
18 for(int i=0;i<10;i++)
19 if (ch[0][i])q.push(ch[0][i]);
20 while (!q.empty()){
21 int k=q.front();
22 q.pop();
23 for(int i=0;i<10;i++)
24 if (!ch[k][i])ch[k][i]=ch[nex[k]][i];
25 else{
26 nex[ch[k][i]]=ch[nex[k]][i];
27 q.push(ch[k][i]);
28 }
29 }
30 }
31 int query(char *s){
32 ans=0;
33 memset(f,0,sizeof(f));
34 mi[0]=mo[d]=f[0][0][1]=1;
35 for(int i=1;i<=d;i++)mi[i]=10LL*mi[i-1]%mod;
36 for(int i=d-1;i>=0;i--)mo[i]=(mo[i+1]+1LL*c*mi[d-i-1])%mod;
37 for(int i=0;i<d;i++)
38 for(int j=0;j<=V;j++){
39 if (vis[j])continue;
40 for(int k=0;k<10;k++){
41 int p=ch[j][k];
42 f[i+1][p][0]=(f[i+1][p][0]+f[i][j][0])%mod;
43 if (k<=c)f[i+1][p][k==c]=(f[i+1][p][k==c]+f[i][j][1])%mod;
44 }
45 }
46 for(int i=0;i<=d;i++)
47 for(int j=0;j<=V;j++)
48 if (vis[j])
49 ans=(ans+1LL*f[i][j][0]*mi[d-i]+1LL*f[i][j][1]*mo[i])%mod;
50 return ans;
51 }
52 int main(){
53 scanf("%s%s%s",s,s1,s2);
54 n=strlen(s);
55 d=strlen(s1);
56 V=0;
57 for(int i=0;i<=n-d/2;i++)add(i,i+d/2-1);
58 build();
59 ans=(query(s2)-query(s1)+mod)%mod;
60 for(int i=0,k=0;s1[i];i++){
61 k=ch[k][s1[i]-'0'];
62 if (vis[k]){
63 ans=(ans+1)%mod;
64 break;
65 }
66 }
67 printf("%d",ans);
68 }
[51nod1587]半现串的更多相关文章
- A股最新的自由现金流和折现估值查询
A股最新的自由现金流折现估值,利用自由现金流折现的经典公式,采用 8%.9%.10%.11%.12%.15% 等贴现率来进行估值. SH600000:浦发银行的最新自由现金流和折现估值模型: 浦发银行 ...
- Banner 广告设计技巧及经验(转自UI中国)
经常听到banner这个词,但是banner是什么意思呢?引用百度知道的解释:banner可以作为网站页面的横幅广告,也可以作为游行活动时用的旗帜,还可以是报纸杂志上的大标题.Banner主要体现中心 ...
- Codeforces Round #427 (Div. 2) Problem D Palindromic characteristics (Codeforces 835D) - 记忆化搜索
Palindromic characteristics of string s with length |s| is a sequence of |s| integers, where k-th nu ...
- Kuangbin 带你飞 KMP扩展KMP Manacher
首先是几份模版 KMP void kmp_pre(char x[],int m,int fail[]) { int i,j; j = fail[] = -; i = ; while (i < m ...
- 【2019 1月集训 Day1】回文的后缀
题意: 给定 n,s,求有多少个字符集大小为 s ,长度为 n 的字符串,使得其不存在一个长度大于 1 的回文后缀. 答案对 m 取模. 分析: 考场见到计数题的链式反应,想写暴力—>暴力难写— ...
- Codeforces Round #311 (Div. 2) E. Ann and Half-Palindrome 字典树/半回文串
E. Ann and Half-Palindrome Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
- 【poj1226-出现或反转后出现在每个串的最长公共子串】后缀数组
题意:求n个串的最长公共子串,子串出现在一个串中可以是它的反转串出现.总长<=10^4. 题解: 对于每个串,把反转串也连进去.二分长度,分组,判断每个组. #include<cstdio ...
- KMP 解决串的模式匹配问题
初学KMP的时候,一直不得要领.后来学习AC自动机的时候,一下子明白了KMP实际上是AC自动机的特殊情况. 首先贴三段代码,一组是回溯法,暴力求解,另外两个是KMP串模式匹配 /* 回溯法字符串匹配算 ...
- 利用反射快速给Model实体赋值 使用 Task 简化异步编程 Guid ToString 格式知多少?(GUID 格式) Parallel Programming-实现并行操作的流水线(生产者、消费者) c# 无损高质量压缩图片代码 8种主要排序算法的C#实现 (一) 8种主要排序算法的C#实现 (二)
试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段.现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增.那么我们就要新建一张合同历史表, ...
随机推荐
- 2020.3.21--ICPC训练联盟周赛Benelux Algorithm Programming Contest 2019
A Appeal to the Audience 要想使得总和最大,就要使最大值被计算的次数最多.要想某个数被计算的多,就要使得它经过尽量多的节点.于是我们的目标就是找到 k 条从长到短的链,这些链互 ...
- Vue3学习(五)之集成HTTP库axios
一.安装axios npm install axios@0.21.0 --save 二.axios的使用 1.在主页中引用axios 在Vue3新增了setup初始化方法,所以我们在这里开始使用并测试 ...
- 1.2 Simple Code!(翻译)
Simple Code! 简洁编码 Playing football is very simple, but playing simple football is the hardest thing ...
- 最详细的Android SDK下载安装及配置教程-------全文均为引用
<https://www.cnblogs.com/gufengchen/p/11038029.html>
- csp-j 复赛感想
作者:博客园小蔡编程 这次是作者第一次参加csp-j的比赛 内心还是挺激动的 今天,作者就来和大家讨论一下这次csp-j的学习心得和感想 T1 分糖果 这题描述看似复杂 其实就是一道求最大取模的题 L ...
- 什么,你还使用 webpack?别人都在用 vite 搭建项目了
一.vite 到底是干嘛的? vite 实际上就是一个面向现代浏览器,基于 ES module 实现了一个更轻快的项目构建打包工具. vite 是法语中轻快的意思. vite 的特点: 1.轻快的冷服 ...
- 如何接入 K8s 持久化存储?K8s CSI 实现机制浅析
作者 王成,腾讯云研发工程师,Kubernetes contributor,从事数据库产品容器化.资源管控等工作,关注 Kubernetes.Go.云原生领域. 概述 进入 K8s 的世界,会发现有很 ...
- Java中类及方法的加载顺序
1. 虚拟机在首次加载Java类时,会对静态代码块.静态成员变量.静态方法进行一次初始化(静态间按顺序执行). 2. 只有在调用new方法时才会创建类的实例. 3. 类实例创建过程:父子继承关系,先父 ...
- [对对子队]会议记录5.15(Scrum Meeting2)
今天已完成的工作 吴昭邦 工作内容:衔接循环指令系统,搭建第4关 相关issue:实现循环组件 相关签入:feat: 将模型加入第四关 第四关可以顺利通过 何瑞 工作内容:衔接循环指令 ...
- 聊聊 Kubernetes Pod or Namespace 卡在 Terminating 状态的场景
这个话题,想必玩过kubernetes的同学当不陌生,我会分Pod和Namespace分别来谈. 开门见山,为什么Pod会卡在Terminationg状态? 一句话,本质是API Server虽然标记 ...