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. 〖C语言学习笔记 〗(二) 数据类型

    前言 本文为c语言的学习笔记,很多只是留下来占位的 数据类型 助记:变量就是在内存中挖个坑并给这个坑命名,而数据类型就是挖内存的坑的尺寸 基础类型 整数类型: short int int long i ...

  2. 法律AI数据及应用

    本文简单列举了法律AI目前的应用,数据集,研究方向. 历史 1970年,Buchanan和Headrick发表文章"关于人工智能和法律推理的一些猜测",讨论了对法律研究和推理进行建 ...

  3. LeetCode -Reverse Pairs

    my solution: class Solution { public: int reversePairs(vector<int>& nums) { int length=num ...

  4. C++ error LNK2001

    1.没有函数的实现部分 2.函数的头文件和实现部分不一致 3.缺库LIB.DLL 4.库H文件函数和库体不一致

  5. luogu P4162 [SCOI2009]最长距离

    传送门 可以枚举两个点然后计算答案,至于是否合法,就要看可不可以通过移不超过\(t\)个箱子使得两点连通,也可以看做找一条路径使得路径上的1个数不超过\(t\) 所以可以考虑最短路,相邻的点两两连边, ...

  6. POJ3304 Segments 【线段直线相交】

    题意: 给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出No!. 思路: 计算几何.这道题要思考到两点: 1:把问题转化为是否存在一条直线 ...

  7. Java9都快发布了,Java8的十大新特性你了解多少呢?

    Java 9预计将于今年9月份发布,这是否会是一次里程碑式的版本,我们拭目以待.今天,我们先来复习一下2014年发布的Java 8的十大新特性. Java 8可谓是自Java 5以来最具革命性的版本了 ...

  8. Python2和Python3中print的不同点

    在Python2和Python3中都提供print()方法来打印信息,但两个版本间的print稍微有差异 主要体现在以下几个方面: 1.python3中print是一个内置函数,有多个参数,而pyth ...

  9. Android的网络通信机制

    1. Socket接口 不常用 2.HttpURLConnection接口 3. HttpClient接口 http://blog.csdn.net/ccc20134/article/details/ ...

  10. jQuery的end() 方法

    定义和用法 end() 方法结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态. 语法 .end() 详细说明 大多数 jQuery 的遍历方法会操作一个 jQuery 对象实例,并生成一 ...