poj1226,poj3080
看来以后用pascal的函数要小心了;
简简单单pos其实时间复杂度是二次方级的……
今天学习的是KMP——字符匹配算法;
这两道题也都很简单,都是为这个算法练手的,
最朴素的匹配显然是穷举起始位置然后看是否匹配,复杂度O(nm)不尽人意
kmp的思想就是尽可能利用之前匹配的信息进行匹配。
具体分析我就不讲了,传送门http://www.cppblog.com/oosky/archive/2006/07/06/9486.html讲的很详细
但据说这两题暴力都可过……
var a:array[..] of string;
next:array[..] of integer;
f:array[..] of boolean;
s:string;
c:char;
i,j,l,t,p,v,n,w:integer;
procedure work_next(s:string);
var i:integer;
begin
fillchar(next,sizeof(next),);
i:=;
j:=;
next[]:=;
while i<=l do
begin
if (j=) or (s[i]=s[j]) then
begin
inc(i);
inc(j);
next[i]:=j;
end
else j:=next[j];
end;
end;
function compare(a,b:string):boolean;
var i,j,l1:integer;
begin
i:=;
j:=;
l1:=length(a);
while (i<=l1) and (j<=l) do
begin
if (j=) or (a[i]=b[j]) then
begin
inc(i);
inc(j);
end
else j:=next[j];
end;
if j>l then exit(true) else exit(false);
end; procedure kmp;
var j:integer;
begin
for j:= to n do
begin
if (j=v) or f[j] then continue;
if (compare(a[j],s)) then
begin
f[j]:=true;
w:=w+;
end;
end;
end; begin
readln(t);
for p:= to t do
begin
readln(n);
v:=;
for i:= to n do
begin
readln(a[i]);
if (v=) or (length(a[i])<length(a[v])) then v:=i;
end;
for l:=length(a[v]) downto do
begin
for i:= to length(a[v])-l+ do
begin
w:=;
fillchar(f,sizeof(f),false);
s:=copy(a[v],i,l);
work_next(s);
kmp;
for j:= to l div do
begin
c:=s[j];
s[j]:=s[l-j+];
s[l-j+]:=c;
end;
work_next(s);
kmp;
if w=n then break;
end;
if w=n then break;
end;
if w=n then writeln(l) else writeln();
end;
end.
poj1226
poj1226,poj3080的更多相关文章
- POJ3080 - Blue Jeans(KMP+二分)
题目大意 求N个字符串的最长公共字串 题解 和POJ1226做法一样...注意是字典序最小的...WA了一次 代码: #include <iostream> #include <cs ...
- POJ-3080 Blue Jeans---字符串+暴力
题目链接: https://vjudge.net/problem/POJ-3080 题目大意: 找最长的公共字串(长度>=3),长度相同就找字典序最小的 解题思路: 枚举第一个串的所以子串,处理 ...
- POJ1226 Substrings ——后缀数组 or 暴力+strstr()函数 最长公共子串
题目链接:https://vjudge.net/problem/POJ-1226 Substrings Time Limit: 1000MS Memory Limit: 10000K Total ...
- 【POJ1226】Substrings(后缀数组,二分)
题意: n<=10,len<=100 思路: 只有一个字符串的时候特判一下 #include<cstdio> #include<cstring> #include& ...
- POJ3080 Blue Jeans —— 暴力枚举 + KMP / strstr()
题目链接:https://vjudge.net/problem/POJ-3080 Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ1226:Substrings(后缀数组)
Description You are given a number of case-sensitive strings of alphabetic characters, find the larg ...
- poj3080解题报告(暴力、最大公共子串)
POJ 3080,题目链接http://poj.org/problem?id=3080 题意: 就是求m个长度为60的字符串的最长连续公共子串,2<=m<=10 规定: 1.最长公共串长度 ...
- POJ3080——Blue Jeans(暴力+字符串匹配)
Blue Jeans DescriptionThe Genographic Project is a research partnership between IBM and The National ...
- POJ1226 - Substrings(KMP+二分)
题目大意 给定n个字符串,字符串可逆序可顺序,求它们的最长公共子串 题解 在输入的过程中记录一下最短的那个字符串,然后枚举起点,然后进行二分求出子串末位置,然后再验证是否是公共子串,记录最长的公共子串 ...
随机推荐
- MySQL查询LIKE如何匹配下划线 通配符转义
MySQL查询时使用LIKE匹配下划线,您会发现连查询“%A_B%”时会出现“%A B%”和“%AB%”也查询出来了,这是因为下划线也被当作特殊字符,做了任意匹配转换了,所以,要想匹配下划线,那么就需 ...
- apache、php隐藏头信息的方法
本文介绍下,在apache与php中隐藏头部信息的方法,有需要的朋友参考下. 一.apache隐藏头部信息 apache 的 httpd.conf 有两个配置可以控制是否显示服务器信息给用户.Serv ...
- Spark小课堂Week4 从控制台看Spark逻辑结构
Spark小课堂Week4 从控制台看Spark逻辑结构 层级关系: 从监控控制台,我们可以看到如下关系: 一个 Job 包含 n Stage 一个 Stage 包含 n Task Job0解决什么问 ...
- Django 下static的配置
1.添加一个BASE_DIR在setting.py中,如果已存在可不用添加,需引入 import os BASE_DIR = os.path.dirname(os.path.dirname(os.pa ...
- ARCGIS 10中添加excel点字段生产点shp文件的工具
菜单栏中——文件——添加数据——添加XY数据——选择excel。 选择x,y和投影(注意这里投影应该是原数据的本身投影,不能直接选择你要转换的投影)完成。
- Asp.net之LINQ入门视频教程
当前位置: 主页 > 编程开发 > Asp.net视频教程 > Asp.net之LINQ入门视频教程 > http://www.xin1234.com/Program/Aspn ...
- div蒙版+可移动
<html> <head> <title></title> <script src="jquery-1.8.2.js&q ...
- Spring.net Could not load type from string value问题解决办法
Spring.net Could not load type from string value "xxx" 错误原因可能有: 1.spring.net配置错误,注意要区别配置文件 ...
- ural 1066 uva 1555
好吧 竟然因为编译器的问题不过 到底有什么区别 ???? 可以推出公式Hi = (i-1)H2 +(i-1)(i-2)-(i-2)*H1 因为所有的Hi都要大于零 Hn要最小 即存在Hi=0 ...
- Windows平台上C++开发内存泄漏检查方法
充分的利用调试工具可以非常方便地避免内存泄漏问题. 这里介绍两种方法,互为补充,第一种是VC编译器提供的方法,第二种是专用的内存泄漏检查工具Memmory Validator.这两种方法的基本原理是一 ...