[LA 3942] Remember the Word
2024-09-04 11:44:31
Link:
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 ;
}
最新文章
- Introduction of OpenCascade Foundation Classes
- VS2012完全卸载与VS2013安装
- SpringMVC原理解析-DispatcherServlet初始化以及请求处理过程
- Codeforces Round #373 (Div. 2) E. Sasha and Array
- Core Data浅谈初级入门
- POJ 1064 (二分)
- Javascript 判断一个数字是否含有小数点
- session与cookie的讲解
- Duilib中Webbrowser事件完善使其支持判断页面加载完毕
- sql GROUP BY 分组统计
- HttpWebRequest 模拟网站登录获取数据
- WC2006水管局长(加强)
- 百度语音合成AI
- ajax一些东西
- 作业:K-means算法应用:图片压缩
- 【Windows】+ windows下在某一文件夹下按“shift+鼠标右键”打开CMD窗口
- YARN 启动后失败退出——没有请求资源——Invalid resource request, no resources request
- 雷林鹏分享:XML 元素
- DS18B20读数错误排除
- Android.DebugTools.Traceview &; dmtracedump
热门文章
- [学习笔记]对未来做出承诺的DP小结
- Consumer [分组背包]
- 安卓和html的互相调用
- eclipse tomcat 插件
- 有关getClassLoader().getResourceAsStream(fileName)、class.getResourceAsStream(fileName)和().getContextClassLoader().getResourceAsStream(fileName)的区别
- HDU 5685 Problem A | 快速幂+逆元
- 【Luogu P3834】可持久化数组(可持久化线段树)
- BZOJ1082_栅栏_C++
- eclipse使用git下载项目
- js 触发LinkButton点击事件,执行后台方法