poj3167
这道题是一道kmp的扩展版的好题
一串匹配一串很容易想到kmp,但是这里的匹配要求的是两个串的名次相同
显然名次是会变的,为了方便,我们可以换一种表达
对于两个等长的串的相同位置,名次相等就是在它之前比它小的数的个数一样,和它相等的数的个数一样
这个我们可以用树状数组维护一下(当然暴力好像也行)
然后匹配就行了
var ans,a,b,sal,eq:array[..] of longint;
next:array[..] of longint;
c:array[..] of longint;
tot,k,n,m,s,i,j:longint; function lowbit(x:longint):longint;
begin
exit(x and (-x));
end; procedure work(x,p:longint);
begin
while x<=s do
begin
inc(c[x],p);
x:=x+lowbit(x);
end;
end; function ask(x:longint):longint;
begin
ask:=;
while x> do
begin
ask:=ask+c[x];
x:=x-lowbit(x);
end;
end; begin
readln(n,m,s);
for i:= to n do
readln(a[i]);
for i:= to m do //预处理
begin
readln(b[i]);
work(b[i],);
sal[i]:=ask(b[i]-);
eq[i]:=ask(b[i]);
end;
fillchar(c,sizeof(c),);
i:=;
j:=;
next[]:=;
while i<=m do
begin
if (j=) or (ask(b[i]-)=sal[j]) and (ask(b[i])=eq[j]) then
begin
inc(i);
inc(j);
next[i]:=j;
if i>m then break;
work(b[i],);
end
else begin
for k:=i-j+ to i-next[j] do // 保证匹配的串位置一样
work(b[k],-);
j:=next[j];
end;
end;
fillchar(c,sizeof(c),);
i:=;
j:=;
work(a[],);
while (i<=n) do
begin
if (j=) or (ask(a[i]-)=sal[j]) and (ask(a[i])=eq[j]) then
begin
inc(i);
inc(j);
if i<=n then
work(a[i],);
end
else begin
for k:=i-j+ to i-next[j] do
work(a[k],-);
j:=next[j];
end;
if j>m then //注意这里要找出的是所有答案
begin
for k:=i-m to i-next[j] do
work(a[k],-);
inc(tot);
ans[tot]:=i-m;
j:=next[j];
end;
end;
writeln(tot);
for i:= to tot do
writeln(ans[i]);
end.
poj3167的更多相关文章
- poj3167(kmp)
题目链接: http://poj.org/problem?id=3167 题意: 给出两串数字 s1, s2, 求主串 s1 中的 s2 匹配数并输出每个匹配的开头位置. 区间 [l, r] 是 s2 ...
- 【POJ 3167】Cow Patterns (KMP+树状数组)
Cow Patterns Description A particular subgroup of K (1 <= K <= 25,000) of Farmer John's cows l ...
随机推荐
- datebox清除按钮,datebox加上清除按钮,easyui datebox加上清除按钮
datebox加上清除按钮,easyui datebox加上清除按钮 >>>>>>>>>>>>>>>>& ...
- (转)JS获取当前对象大小以及屏幕分辨率等
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> ...
- Lucene技术杂谈
Lucene教程 1 lucene简介 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么 ...
- (转)Asp.Net 请求处理机制
原文:http://www.cnblogs.com/cilence/archive/2012/05/28/2520712.html Asp.Net 请求处理机制 前言 我们都知道Web请求响应是基 ...
- Android MVP模式的初识
MVP是什么?或许在之前更多的人知道的是MVC这个模式(Model View Controller),然而MVP与MVC最不同的一点是M与V是不直接 关联的也是就Model与View不存在直接关系 ...
- jQuery.each的function中有哪些参数(可以大概理解function中的参数问题)
1.没有参数 $("img").each(function(){ $(this).toggleClass("example"); }); 1 2 3 2.有一个 ...
- spring源码_下载以及转入eclipse (2016-11-08)
本例spring源码版本是4.3.0的, 所以jdk需要准备1.8的(不同版本源码要求的jdk不一样) 1.8版本myeclipse10无编译环境,只有运行环境,出现点问题,下载最新版本的Eclips ...
- Win32 GDI 非矩形区域剪裁,双缓冲技术
传统的Win32通过GDI提供图形显示的功能,包括了基本的绘图功能,如画线.方块.椭圆等等,高级功能包括了多边形和Bezier的绘制.这样app就不用关心那些图形学的细节了,有点类似于UNIX上的X- ...
- 各大浏览器内核(Rendering Engine)
记得刚开始写网页的时候,听童鞋们说各大浏览器的内核,也是懵懵懂懂的,知一不知其二,今天特地查一下: 内核只是一个通俗的说法,其英文名称为“Layout engine”,翻译过来就是“排版引擎”,也被称 ...
- Windows phone常用控件之Button
Button类:表示一个响应 ButtonBase.Click 事件的 Windows 按钮控件. 继承层次结构: 命名空间: System.Windows.Controls ClickMode ...