Link:

LA 3942 传送门

Solution:

感觉自己字符串不太行啊,要加练一些蓝书上的水题了……

$Trie$+$dp$

转移方程:$dp[i]=sum\{ dp[i+len(x)+1]\} (x为从第i位开始的字符串的前缀)$

计算一个字符串前缀的多模式匹配在$Trie$树上跑一遍就行啦!

Code:

#include <bits/stdc++.h>

using namespace std;
const int MAXN=4e5+,MOD=;
bool vis[MAXN];
char s[MAXN],tmp[MAXN];
int T,n,ch[MAXN][],dp[MAXN],l,len,cnt=,rt=; int main()
{
while(~scanf("%s",s+))
{
memset(ch,,sizeof(ch));memset(dp,,sizeof(dp));
memset(vis,false,sizeof(vis)); T++;len=strlen(s+);
scanf("%d",&n);cnt=;
for(int i=;i<=n;i++)
{
scanf("%s",tmp+);l=strlen(tmp+);
int cur=rt;
for(int j=;j<=l;j++)
{
if(!ch[cur][tmp[j]-'a'])
ch[cur][tmp[j]-'a']=++cnt;
cur=ch[cur][tmp[j]-'a'];
}
vis[cur]=true;
} dp[len+]=;
for(int i=len;i>=;i--)
{
int cur=rt;
for(int j=i;j<=len;j++)
{
if(!ch[cur][s[j]-'a']) break;
cur=ch[cur][s[j]-'a'];
if(vis[cur]) (dp[i]+=dp[j+])%=MOD;
}
}
printf("Case %d: %d\n",T,dp[]);
}
return ;
}

最新文章

  1. Introduction of OpenCascade Foundation Classes
  2. VS2012完全卸载与VS2013安装
  3. SpringMVC原理解析-DispatcherServlet初始化以及请求处理过程
  4. Codeforces Round #373 (Div. 2) E. Sasha and Array
  5. Core Data浅谈初级入门
  6. POJ 1064 (二分)
  7. Javascript 判断一个数字是否含有小数点
  8. session与cookie的讲解
  9. Duilib中Webbrowser事件完善使其支持判断页面加载完毕
  10. sql GROUP BY 分组统计
  11. HttpWebRequest 模拟网站登录获取数据
  12. WC2006水管局长(加强)
  13. 百度语音合成AI
  14. ajax一些东西
  15. 作业:K-means算法应用:图片压缩
  16. 【Windows】+ windows下在某一文件夹下按“shift+鼠标右键”打开CMD窗口
  17. YARN 启动后失败退出——没有请求资源——Invalid resource request, no resources request
  18. 雷林鹏分享:XML 元素
  19. DS18B20读数错误排除
  20. Android.DebugTools.Traceview &amp; dmtracedump

热门文章

  1. [学习笔记]对未来做出承诺的DP小结
  2. Consumer [分组背包]
  3. 安卓和html的互相调用
  4. eclipse tomcat 插件
  5. 有关getClassLoader().getResourceAsStream(fileName)、class.getResourceAsStream(fileName)和().getContextClassLoader().getResourceAsStream(fileName)的区别
  6. HDU 5685 Problem A | 快速幂+逆元
  7. 【Luogu P3834】可持久化数组(可持久化线段树)
  8. BZOJ1082_栅栏_C++
  9. eclipse使用git下载项目
  10. js 触发LinkButton点击事件,执行后台方法