题目链接:http://poj.org/problem?id=3167

题意:模式串可以浮动的模式匹配问题给出模式串的相对大小,需要找出模式串匹配次数和位置。

思路:统计比当前数小,和于当前数相等的,然后进行kmp。

比如说模式串:1,4,4,2,3,1 而主串:5,6,2,10,10,7,3,2,9,那么2,10,10,7,3,2就是匹配的

code:

 #include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int MAXN = ;
const int MAXM = ; int a[MAXN]; // 存放主串
int b[MAXM]; // 存放模式串
int as[MAXN][]; // as[i][j] = k表示0 - i位中有k个数字j
int bs[MAXM][]; // bs[i][j] = k表示0 - i位中有k个数字j
int next[MAXM]; // 存放模式串失配时的移动位数
vector<int> ans; // 存放结果
int n, m, s; void Init()
{
ans.clear();
memset(as, , sizeof(as));
memset(bs, , sizeof(bs));
as[][a[]] = ;
bs[][b[]] = ;
for (int i = ; i <= n; ++i)
{
memcpy(as[i], as[i - ], sizeof(as[]));
++as[i][a[i]];
}
for (int i = ; i <= m; ++i)
{
memcpy(bs[i], bs[i - ], sizeof(bs[]));
++bs[i][b[i]];
}
} void GetNext()
{
memset(next, , sizeof(next));
int i = , j = , k = ;
next[] = ;
while (i <= m)
{
int si = , sj = , ei = , ej = ;
for (k = ; k < b[i]; ++k)
si += bs[i][k] - bs[i - j][k];
ei = bs[i][k] - bs[i - j][k];
for (k = ; k < b[j]; ++k)
sj += bs[j][k];
ej = bs[j][k];
if ( == j || (si == sj && ei == ej)) next[++i] = ++j;
else j = next[j];
}
} void Kmp()
{
int i = , j = , k = ;
while (i <= n)
{
int si = , sj = , ei = , ej = ;
for (k = ; k < a[i]; ++k)
si += as[i][k] - as[i - j][k];
ei = as[i][k] - as[i - j][k];
for (k = ; k < b[j]; ++k)
sj += bs[j][k];
ej = bs[j][k];
if ( == j || (si == sj && ei == ej)) ++i, ++j;
else j = next[j];
if (j == m + )
{
ans.push_back(i - m);
j = next[j];
}
}
} int main()
{
while (scanf("%d %d %d", &n, &m, &s) == )
{
for (int i = ; i <= n; ++i) scanf("%d", &a[i]);
for (int i = ; i <= m; ++i) scanf("%d", &b[i]);
Init();
GetNext();
Kmp();
size_t len = ans.size();
printf("%d\n", len);
for (size_t i = ; i < len; ++i) printf("%d\n", ans[i]);
}
return ;
}

POJ 3167 Cow Patterns(模式串浮动匹配)的更多相关文章

  1. POJ 3167 Cow Patterns (KMP+前缀和)

    题意:给你两串数字,长度分别为n和m,数字大小在[1,25].当后一串数字每个数字的排名位置与前一串数字(任一长度为m的子串)每个数字的排名位置一致时就完全匹配,最后求哪些位置是完全匹配的. 例如:1 ...

  2. AC自动机 - 多模式串的匹配 --- HDU 3695 Computer Virus on Planet Pandora

    Problem's Link Mean: 有n个模式串和一篇文章,统计有多少模式串在文章中出现(正反统计两次). analyse: 好久没写AC自动机了,回顾一下AC自动机的知识. 本题在构造文章的时 ...

  3. AC自动机 - 多模式串的匹配运用 --- HDU 3065

    病毒侵袭持续中 Problem's Link:http://acm.hdu.edu.cn/showproblem.php?pid=3065 Mean: 略 analyse: AC自动机的运用. 这一题 ...

  4. POJ 3461 Oulipo(KMP,模式串在主串中出现次数 可重叠)

    题意:给你两个字符串p和s,求出p在s中出现的次数. 显然,我们要先把模式串放到前面,之后主串放后面,中间隔开,这样就可以根据前缀数组的性质来求了. 我先想直接把p接到s前面,之后求Next数组对st ...

  5. 【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)

    题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力. ...

  6. POJ 3461 Oulipo(模式串在主串中出现的次数)

    题目链接:http://poj.org/problem?id=3461 题意:给你两个字符串word和text,求出word在text中出现的次数 思路:kmp算法的简单应用,遍历一遍text字符串即 ...

  7. AC自动机 - 多模式串的匹配运用 --- HDU 2896

    病毒侵袭 Problem's Link:http://acm.hdu.edu.cn/showproblem.php?pid=2896 Mean: 略 analyse: AC自动机的运用,多模式串匹配. ...

  8. HDU-2087-剪花布条 【KMP】(求模式串的匹配个数——与已匹配的字串不交)

    题目链接:https://vjudge.net/contest/220679#problem/C 剪花布条                                               ...

  9. POJ 3167 Cow Pattern ★(KMP好题)

    题意 给你一个数字序列S,再给一个数字序列pattern,S和pattern中的数字都是1到s(s<=25).每个序列里的数字都有个排名,也就是第几小,现在我们要用pattern来匹配S.在本题 ...

随机推荐

  1. CentOS 七 vs CentOS 6的不同

    CentOS 七 vs CentOS 6的不同   CentOS 7 vs CentOS 6的不同(1)桌面系统[CentOS6] GNOME 2.x[CentOS7] GNOME 3.x(GNOME ...

  2. Sublime text3使用积累

    1.colorpicker选择颜色的. 快捷键ctrl+shift+C 2.jsFormat格式化js 快捷键ctrl+alt+f [ { "keys": ["ctrl+ ...

  3. Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn

    这个异常我在网上查看了很多资料,一般都说是hibernate的session问题,让重新两个方法,但是我以前用的时候没问题啊,所以一直找问题,终于这个bug让我找到了,就是因为我插入操作的时候用的是别 ...

  4. SQL Server 2008 批量插入数据时报错

    前几天在SQL Server 2008同步产品数据时,总是提示二进制文本被截断的错误,但是经过检查发现数据都符合格式要求. 百思不得其解,单独插入一条条数据则可以插入,但是批量导入则报错. 批量导入代 ...

  5. http-关于application/x-www-form-urlencoded等字符编码的解释说明

    在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型. 下边是说明: application/x-www-form-urlen ...

  6. 潜在语义分析Latent semantic analysis note(LSA)原理及代码

    文章引用:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被称为Latent S ...

  7. 编写可维护的JS 05

    5.UI层的松耦合 松耦合定义 每个组件尽量独立,修改一个不影响其他的组件 将Js从css中抽离 不要使用css表达式,因为浏览器会以高频率重复计算css表达式,严重影响性能,IE9不支持表达式 将C ...

  8. 转载:JS触发服务器控件的单击事件

    原文地址:http://blog.csdn.net/joyhen/article/details/8485321 <script src="../Js/jquery-1.4.2.min ...

  9. 读书笔记 - 设计模式(Head First)

    设计模式让你和其他开发人员之间有共享的词汇,设计模式可以把你的思考架构的层次提高到模式层面,而不是停留在琐碎的对象上. 设计原则: 封装变化:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需 ...

  10. html5 canvas 运行起来绝对让你震撼!

    从一个大神那看到的,拷贝过来跟大家分享下! html <canvas></canvas> *{margin:0;padding:0;}body{background:#222; ...