题意:给定字符串S,A,B。现在让你对S进行切割,使得每个切割出来的部分在[A,B]范围内,问方案数。

思路:有方程,dp[i]=Σ dp[j]   (S[j+1,i]在合法范围内)。    假设M和N的最长公共前缀为长度是LCP,那么字符串M>=字符串N的条件是  LCP=|N|或者(LCP<|N|&&M[lcp+1]>N[lca+1]); 小于同理。 求出范围就可以用前缀和 O(N)求DP了。

而LCP显然可以用exkmp求。 最近发现Z算法比较好写。  尝试了一下。  这里把两个串连起来一次性求,看起来比较舒服。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int Mod=;
char s[maxn<<],l[maxn],r[maxn];
int z1[maxn],z2[maxn],lena,lenl,lenr;
void Z(char a[],char t[],int z[])
{
int f=strlen(a+),w=strlen(t+);
a[f+]='&'; rep(i,,w) a[f++i]=t[i]; int n=f+w+;
z[]=n; int L=,R=;
rep(i,,n) {
if(R<i) z[i]=;
else z[i]=min(R-i+,z[i-L+]);
while(i+z[i]<=n&&a[i+z[i]]==a[z[i]+]) z[i]++;
if(i+z[i]->R) L=i,R=i+z[i]-;
}
rep(i,,w) z[i]=z[f++i];
}
int dp[maxn],sum[maxn];
int main()
{
scanf("%s%s%s",s+,l+,r+);
lena=strlen(s+); lenl=strlen(l+); lenr=strlen(r+);
Z(l,s,z1); Z(r,s,z2);
dp[lena+]=sum[lena+]=;
for(int i=lena;i>=;i--) {
sum[i]=sum[i+];
if(s[i]=='') dp[i]=(l[]=='')*dp[i+],sum[i]=(sum[i]+dp[i])%Mod;
else {
int L=i+lenl,R=min(i+lenr-,lena);
if(z1[i]==lenl||s[i+z1[i]]>l[z1[i]+]) L--;
if(R<lena&&(z2[i]==lenr||s[i+z2[i]]<r[z2[i]+])) R++;
if(L<=R) dp[i]=(sum[L+]-sum[R+]+Mod)%Mod,sum[i]=(sum[i]+dp[i])%Mod;
}
}
printf("%d\n",dp[]);
return ;
}

最新文章

  1. php删除目录下的所有文件和目录
  2. css文本溢出省略号
  3. js 选项卡实现
  4. How to use For loop in CruiseControl.net
  5. JVM学习笔记(一)------基本结构
  6. Debian8 加载NTFS 磁盘出错 解决方法
  7. mutate 转换
  8. 理解 backbone.js 中的 bind 和 bindAll 方法,关于如何在方法中指定其中的 this,包含apply方法的说明[转载]
  9. [转载]CTreeCtrl 和 CListCtrl 控件(VC_MFC)
  10. ASP.NET Core MVC上传、导入、导出知多少
  11. Webpack打包构建太慢了?试试几个方法
  12. Servlet--ServletConfig接口,GenericServlet类
  13. Requests库作者另一神器Pipenv的用法
  14. 【SpringCloud Eureka源码】从Eureka Client发起注册请求到Eureka Server处理的整个服务注册过程(下)
  15. SWPU新闻后台登录页面
  16. unicode utf-8 ascll编码比较
  17. 2019.02.07 bzoj4316: 小C的独立集(仙人掌+树形dp)
  18. [LintCode] Invert Binary Tree 翻转二叉树
  19. 误卸载glibc类库导致系统崩溃解决方案
  20. 【BZOJ2783】[JLOI2012]树 DFS+栈+队列

热门文章

  1. Appium 滑动踩坑记
  2. windows x64安装与测试redis
  3. JavaSE 笔试题: 自增变量
  4. AntDesign vue学习笔记(三)嵌套路由使用
  5. SpringBoot扩展点之三:SpringBootServletInitializer扩展
  6. 【题解】整数划分 [51nod1201] 整数划分 V2 [51nod1259]
  7. 『7.3 NOIP模拟赛题解』
  8. 详解JS与Jquery获得的对象的区别与联系
  9. 服务器推送之SSE简单使用
  10. 测试欧气的小游戏-java