3409: [Usaco2009 Oct]Barn Echoes 牛棚回声

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 57  Solved: 47
[Submit][Status][Discuss]

Description

奶牛们灰常享受在牛栏中哞叫,因为她们可以听到她们哞声的回音。虽然有时候并不能完全听到完整的回音。Bessie曾经是一个出色的秘书,所以她精确地纪录了所有的哞叫声及其回声。她很好奇到底两个声音的重复部份有多长。

输入两个字符串(长度为1到80个字母),表示两个哞叫声。你要确定最长的重复部份的长度。两个字符串的重复部份指的是同时是一个字符串的前缀和另一个字符串的后缀的字符串。

我们通过一个例子来理解题目。考虑下面的两个哞声:

    moyooyoxyzooo
yzoooqyasdfljkamo

第一个串的最后的部份"yzooo"跟第二个串的第一部份重复。第二个串的最后的部份"mo"跟第一个串的第一部份重复。所以"yzooo"跟"mo"都是这2个串的重复部份。其中,"yzooo"比较长,所以最长的重复部份的长度就是5。

Input

两行: 每一行是1个字符串表示奶牛的哞声或它的回声。

Output

第一行: 包含一个单独的整数表示输入的2个字符串中,一个字符串的前缀和另一个字符串的后缀的最长的重复部份的长度。

Sample Input

abcxxxxabcxabcd
abcdxabcxxxxabcx

Sample Output

11

"abcxxxxabcx"是第一个字符串的前缀和第二个字符串的后缀。

HINT

 

Source

Gold

题解:不知道bzoj啥时候冒出来一堆普及组的题目QAQ

要是想A的话太容易了,所以还是瞎搞搞来连连脑洞吧

方法一:直接\( O\left({N}^{2} \right) \)瞎搞。。。(PS:不要问我为啥只有一层循环,事实上copy的复杂度是O(N)的)

 /**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ var
i,j,k,l,m,n:longint;
s1,s2,s3:ansistring;
function max(x,y:longint):longint;
begin
if x>y then max:=x else max:=y;
end;
begin
readln(s1);
readln(s2);l:=;
for i:=max(length(s2)-length(s1)+,) to length(s2) do
begin
s3:=copy(s2,i,length(s2)+-i);
if copy(s1,,length(s2)+-i)=s3 then
begin
l:=length(s2)+-i;
break;
end;
end;
for i:=max(length(s1)-length(s2)+,) to length(s1) do
begin
s3:=copy(s1,i,length(s1)+-i);
if copy(s2,,length(s1)+-i)=s3 then
begin
l:=max(l,length(s1)+-i);
break;
end;
end;
writeln(l);
readln;
end.

方法二:这是我第一反应的做法(但是N<=80是什么节奏= =)——字符串哈希(哈希大法好OTL),于是瞎搞搞,很基础的。。。(本人实测N<=3000000都能1s内出来)

 /**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ const p=;q=;
var
i,j,k,l,m,n,x0,y0,x,y:longint;
list,a,b:array[..,..] of int64;
s1,s2:ansistring;
function max(x,y:longint):longint;
begin
if x>y then max:=x else max:=y;
end; begin
list[,]:=;list[,]:=;
readln(s1);
readln(s2);l:=;
n:=max(length(s1),length(s2))+;
for i:= to n do
begin
list[i,]:=(list[i-,]*p) mod q;
list[i,]:=(list[i-,]*q) mod p;
end;
a[,]:=;a[,]:=;
for i:= to length(s1) do
begin
a[i,]:=(a[i-,]+(list[i,]*ord(s1[i])) mod q) mod q;
a[i,]:=(a[i-,]+(list[i,]*ord(s1[i])) mod p) mod p;
end;
b[,]:=;b[,]:=;
for i:= to length(s2) do
begin
b[i,]:=(b[i-,]+(list[i,]*ord(s2[i])) mod q) mod q;
b[i,]:=(b[i-,]+(list[i,]*ord(s2[i])) mod p) mod p;
end;
for i:=max(,length(s1)-length(s2)+) to length(s1) do
begin
j:=length(s1)-i+;
x:=(list[i-,]*b[j,]) mod q;
y:=(list[i-,]*b[j,]) mod p;
x0:=((a[length(s1),]-a[i-,]) mod q+q) mod q;
y0:=((a[length(s1),]-a[i-,]) mod p+p) mod p;
if (x=x0) and (y=y0) then
begin
l:=j;
break;
end;
end;
for i:=max(,length(s2)-length(s1)+) to length(s2) do
begin
j:=length(s2)-i+;
x:=(list[i-,]*a[j,]) mod q;
y:=(list[i-,]*a[j,]) mod p;
x0:=((b[length(s2),]-b[i-,]) mod q+q) mod q;
y0:=((b[length(s2),]-b[i-,]) mod p+p) mod p;
if (x=x0) and (y=y0) then
begin
l:=max(j,l);
break;
end;
end;
writeln(l);
readln;
end.

3409: [Usaco2009 Oct]Barn Echoes 牛棚回声的更多相关文章

  1. BZOJ 3408: [Usaco2009 Oct]Heat Wave 热浪( 最短路 )

    普通的最短路...dijkstra水过.. ------------------------------------------------------------------------------ ...

  2. BZOJ 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题( dp )

    01背包... ----------------------------------------------------------------------- #include<cstdio&g ...

  3. 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵

    3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 8 ...

  4. 3408: [Usaco2009 Oct]Heat Wave 热浪

    3408: [Usaco2009 Oct]Heat Wave 热浪 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 67  Solved: 55[Subm ...

  5. 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题

    3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit:  ...

  6. 洛谷 2957 [USACO09OCT]谷仓里的回声Barn Echoes

    题目描述 The cows enjoy mooing at the barn because their moos echo back, although sometimes not complete ...

  7. 洛谷——P2957 [USACO09OCT]谷仓里的回声Barn Echoes

    https://www.luogu.org/problem/show?pid=2957 题目描述 The cows enjoy mooing at the barn because their moo ...

  8. [USACO09OCT]谷仓里的回声Barn Echoes(hush、STL)

    https://www.luogu.org/problem/P2957 题目描述 The cows enjoy mooing at the barn because their moos echo b ...

  9. [luoguP2957] [USACO09OCT]谷仓里的回声Barn Echoes(Hash)

    传送门 团队里的hash水题,数据小的不用hash都能过.. 也就是前缀hash,后缀hash,再比较一下就行. ——代码 #include <cstdio> #include <c ...

随机推荐

  1. 用Redis作为Mysql数据库的缓存

    看到一篇不错的博文,记录下: http://blog.csdn.net/qtyl1988/article/details/39553339 http://blog.csdn.net/qtyl1988/ ...

  2. Bootstrap入门(二十一)组件15:警告框

    Bootstrap入门(二十一)组件15:警告框 通过这些简单.灵活的进度条,为当前工作流程或动作提供实时反馈. 进度条组件使用了 CSS3 的 transition 和 animation 属性来完 ...

  3. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  4. (一)Redis在windows下的安装和使用

    1.下载redis服务端,地址:https://github.com/MSOpenTech/redis/releases 包含安装程序和源码. 2.解压<Redis-x64-3.2.100.zi ...

  5. 《JAVASCRIPT高级程序设计》第五章(1)

    引用类型是一种将数据和功能组合到一起的数据结构,它与类相似,但是是不同的概念:ECMAScript虽然是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和结构等基本结构.引用类型也被称为“对 ...

  6. 通过java.net.URLConnection发送HTTP请求的方法

    一.前言 如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求. Java有原生的API可用于发送HTTP请求,即java.net.URL.java.net.UR ...

  7. PROC UNIVARIATE过程

    EDA(探索性数据分析)最常用的过程步之一就是PROC UNIVARIATE. 首先先看一个最简单的PROC UNIVARIATE程序: PROC UNIVARIATE DATA=SASHELP.FI ...

  8. 《微信小程序七日谈》- 第七天:不要捡了芝麻丢了西瓜

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩: 第五 ...

  9. gradient的几点认识转载

    线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向 径向渐变(Radial Gradients)- 由它们的中心定义 在这里主要讲线性渐变谷歌浏览器中:(1)backgr ...

  10. localStorage 如何存储JSON数据并读取JSON数据

    localStorage是HTML5提供的再客户端实现本地存储的一种方法,但是localStorage方法只能存储字符串数据,有时候我们需要存储对象到本地比如:JSON:那么,localStorage ...