535D - Tavas and Malekas

题目大意:给你一个模板串,给你一个 s 串的长度,告诉你 s 串中有 m 个模板串并告诉你,他们的其实位置,

问你这样的 s 串总数的多少,答案对1e9+7取模。

我感觉我英语是不是不行啊,我以为他的意思是他里面一共只有m个匹配串,想着没有其他的匹配串,感觉

好麻烦好麻烦好麻烦啊!!!!!!

思路:最暴力的思路,他给你一个匹配串的位置,你就在s串上更新,如果遇到没有已经被更新而且字符不同时

输出0,然后统计剩下的未知字符的个数x,答案就是 (26^x)%mod。这样可能会超时,我今天学习了一波

KMP(看毛片)算法,这玩意真的有点难理解,以后多理解几遍。

我们可以在更新s串的时候只更新后面没有更新的,然后用kmp扫一遍,看m个匹配串是否都出现过就好了。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+;
const ll mod=1e9+;
char s[N],t[N];
int nx[N];
int len1,len2,n,m,w[N],c=;
void get_next()
{
int k=;
for(int i=;i<len2;i++)
{
while(k> && t[k]!=t[i]) k=nx[k-];
if(t[k]==t[i]) k++;
nx[i]=k;
}
}
void kmp()
{
int k=;
for(int i=;i<n;i++)
{
while(k> && t[k]!=s[i]) k=nx[k-];
if(t[k]==s[i]) k++;
if(k==len2)
{
if(binary_search(w,w+m,i-k+)) c++;
}
}
}
int main()
{
cin>>n>>m;
scanf("%s",t);
len2=strlen(t);
for(int i=;i<n;i++) s[i]='?';
s[n]='\0';
for(int i=;i<m;i++) scanf("%d",&w[i]),w[i]-=;
sort(w,w+m);
m=unique(w,w+m)-w;
int last=-;
for(int i=;i<m;i++)
{
if(w[i]+len2->last)
{
int start=w[i],dis=;
if(last+>w[i])
{
dis=last+-w[i];//dis为相对模板串开头的偏移位置。
start=last+;
}
for(int j=start;j<=w[i]+len2-;j++) s[j]=t[j-start+dis];
last=w[i]+len2-;
}
}
//puts(s);
get_next();
kmp();
if(c<m)
{
puts("");
return ;
}
ll res=;
for(int i=;i<n;i++)
{
if(s[i]=='?') res+=;
}
ll ans=;
for(int i=;i<=res;i++)
{
ans=(ans*(ll))%mod;
}
cout<<ans<<endl;
return ;
}

Codeforces 535D - Tavas and Malekas的更多相关文章

  1. codeforces 535D. Tavas and Malekas KMP

    题目链接 又复习了一遍kmp....之前都忘光了 #include<bits/stdc++.h> using namespace std; #define pb(x) push_back( ...

  2. 535D Tavas and Malekas

    题目大意 给你一个串和m个下标 问你一个长度为n的串每一个下标开始的后缀的前缀都包含给定的串的方案数 分析 对于给定的串求出z数组 对于两个串不重叠的情况就是中间都不包含的数随便填即可 对于重叠的情况 ...

  3. Codeforces Round #299 (Div. 2) D. Tavas and Malekas kmp

    题目链接: http://codeforces.com/problemset/problem/535/D D. Tavas and Malekas time limit per test2 secon ...

  4. D. Tavas and Malekas 解析(字串匹配)

    Codeforce 535 D. Tavas and Malekas 解析(字串匹配) 今天我們來看看CF535D 題目連結 題目 給你一個字串$p$和一些$index$代表字串$p$在哪些位置會和長 ...

  5. Codeforces Round #299 (Div. 2)D. Tavas and Malekas

    KMP,先预处理按每个节点标记,扫一遍更新每个匹配位置,最后kmp判断是否有重合而且不相同的地方 注意处理细节,很容易runtime error #include<map> #includ ...

  6. 【Codeforces Round #299 (Div. 2) D】Tavas and Malekas

    [链接] 我是链接,点我呀:) [题意] 给你n个位置,然后让你从某些位置开始的|p|个位置,填上p这个字符串. 问你填的时候是否会发生冲突->输出0 否则输出最终n个位置组成的可能的字符串的总 ...

  7. CF #299 div1 B. Tavas and Malekas KMP-next数组

    题目链接:http://codeforces.com/contest/536/problem/B 一个原始字符串,一个未知字符串,每一次从pos[i]开始覆盖未知字符串,问最后字符串的形式,以及判断过 ...

  8. Codeforces 535C - Tavas and Karafs

    535C - Tavas and Karafs 思路:对于满足条件的r,max(hl ,hl+1 ,hl+2 ,......,hr )<=t(也就是hr<=t)且∑hi<=t*m.所 ...

  9. Codeforces B - Tavas and SaDDas

    535B - Tavas and SaDDas 方法一:打表大法. 代码1: #include<bits/stdc++.h> using namespace std; ]={,,,,,,, ...

随机推荐

  1. Kettle基本概念学习

    一,理解开发环境与生产环境. 比如,在windows或mac下设计好流程之后,把该设计文件上传到linux集群的机器上执行.那么,在windows下进行的工作即为开发环境,任务具体在linxu机器上执 ...

  2. div背景透明内容不透明与0.5PX边框兼容设置

    1.问题:设置 border-width:0.5px;  并兼容安卓和苹果移动端.  兼容:苹果IOS的 safari 支持浮点数边框,安卓浏览器不支持,会四舍五入到1px.不同浏览器效果额不同  解 ...

  3. ZOC7 for Mac连接CentOS7无法输入中文问题

    确定是ZOC7的问题 改为 iTerm2 加 ZSH 能够输入中文了 自己配置profile 慢慢所有的终端都用iTerm2 渐渐放弃ZOC7

  4. js sort方法根据数组中对象的某一个属性值进行排序

    sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {name:'zopp',age:0}, {name:'gpp' ...

  5. python 错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

    参照:http://www.runoob.com/django/django-form.html 做了个表单提交和回显,但是报了以上错误 查资料发现是 python从request取值的是unicod ...

  6. java并发编程系列三、Lock和Condition

    有了synchronized为什么还要Lock? 因为Lock和synchronized比较有如下优点 1. 尝试非阻塞地获取锁 2. 获取锁的过程可以被中断 3. 超时获取锁 Lock的标准用法 p ...

  7. notepad++64位添加plugin manager

    - 64位的notepad++,下载下来似乎没有plugin manager,如果真没有可以下载plugin manager. - plugin manager的下载地址:https://github ...

  8. plsql developer导入导出序列方法

    导出: 1.打开PLSQL Developer,工具 2.类型排序,选中所有sequence,指定用户,单个文件,选择导出文件路径,等待执行完毕即可. 导入: 打开导出的文件,复制,在新打开的命令窗口 ...

  9. zabbix系列(七)zabbix3.0添加对tcp连接数及状态的监控

    原理: netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' TIME_WAIT 79 ESTABLISHED 6 LISTE ...

  10. 取消Eclipse控制台显示行数的限制

    --------------------------------------------------------------------------------------------------- ...