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

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

Description

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

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

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

    moyooyoxyzoooyzoooqyasdfljkamo

第一个串的最后的部份"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)的)

 1 /**************************************************************
 2     Problem: 3409
 3     User: HansBug
 4     Language: Pascal
 5     Result: Accepted
 6     Time:0 ms
 7     Memory:416 kb
 8 ****************************************************************/
 9
10 var
11    i,j,k,l,m,n:longint;
12    s1,s2,s3:ansistring;
13 function max(x,y:longint):longint;
14          begin
15               if x>y then max:=x else max:=y;
16          end;
17 begin
18      readln(s1);
19      readln(s2);l:=0;
20      for i:=max(length(s2)-length(s1)+1,1) to length(s2) do
21          begin
22               s3:=copy(s2,i,length(s2)+1-i);
23               if copy(s1,1,length(s2)+1-i)=s3 then
24                  begin
25                       l:=length(s2)+1-i;
26                       break;
27                  end;
28          end;
29      for i:=max(length(s1)-length(s2)+1,1) to length(s1) do
30          begin
31               s3:=copy(s1,i,length(s1)+1-i);
32               if copy(s2,1,length(s1)+1-i)=s3 then
33                  begin
34                       l:=max(l,length(s1)+1-i);
35                       break;
36                  end;
37          end;
38      writeln(l);
39      readln;
40 end.     

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

 1 /**************************************************************
 2     Problem: 3409
 3     User: HansBug
 4     Language: Pascal
 5     Result: Accepted
 6     Time:0 ms
 7     Memory:4944 kb
 8 ****************************************************************/
 9
10 const p=314159;q=951413;
11 var
12    i,j,k,l,m,n,x0,y0,x,y:longint;
13    list,a,b:array[0..5000000,1..2] of int64;
14    s1,s2:ansistring;
15 function max(x,y:longint):longint;
16          begin
17               if x>y then max:=x else max:=y;
18          end;
19
20 begin
21      list[0,1]:=1;list[0,2]:=1;
22      readln(s1);
23      readln(s2);l:=0;
24      n:=max(length(s1),length(s2))+1;
25      for i:=1 to n do
26          begin
27               list[i,1]:=(list[i-1,1]*p) mod q;
28               list[i,2]:=(list[i-1,2]*q) mod p;
29          end;
30      a[0,1]:=0;a[0,2]:=0;
31      for i:=1 to length(s1) do
32          begin
33               a[i,1]:=(a[i-1,1]+(list[i,1]*ord(s1[i])) mod q) mod q;
34               a[i,2]:=(a[i-1,2]+(list[i,2]*ord(s1[i])) mod p) mod p;
35          end;
36      b[0,1]:=0;b[0,2]:=0;
37      for i:=1 to length(s2) do
38          begin
39               b[i,1]:=(b[i-1,1]+(list[i,1]*ord(s2[i])) mod q) mod q;
40               b[i,2]:=(b[i-1,2]+(list[i,2]*ord(s2[i])) mod p) mod p;
41          end;
42      for i:=max(1,length(s1)-length(s2)+1) to length(s1) do
43          begin
44               j:=length(s1)-i+1;
45               x:=(list[i-1,1]*b[j,1]) mod q;
46               y:=(list[i-1,2]*b[j,2]) mod p;
47               x0:=((a[length(s1),1]-a[i-1,1]) mod q+q) mod q;
48               y0:=((a[length(s1),2]-a[i-1,2]) mod p+p) mod p;
49               if (x=x0) and (y=y0) then
50                  begin
51                       l:=j;
52                       break;
53                  end;
54          end;
55      for i:=max(1,length(s2)-length(s1)+1) to length(s2) do
56          begin
57               j:=length(s2)-i+1;
58               x:=(list[i-1,1]*a[j,1]) mod q;
59               y:=(list[i-1,2]*a[j,2]) mod p;
60               x0:=((b[length(s2),1]-b[i-1,1]) mod q+q) mod q;
61               y0:=((b[length(s2),2]-b[i-1,2]) mod p+p) mod p;
62               if (x=x0) and (y=y0) then
63                  begin
64                       l:=max(j,l);
65                       break;
66                  end;
67          end;
68      writeln(l);
69      readln;
70 end.     

转载于:https://www.cnblogs.com/HansBug/p/4418659.html

3409: [Usaco2009 Oct]Barn Echoes 牛棚回声相关推荐

  1. Tyvj P1029 牛棚回声

    USACO October 2009 Qualifying Barn Echoes 问题描述: 奶牛们非常享受在牛栏中哞叫,因为她们可以听到她们哞声的回音.虽然有时候并不能完全听到完整的回音.Bess ...

  2. bzoj 3386 bzoj 3408: [Usaco2009 Oct]Heat Wave 热浪(最短路)

    3408: [Usaco2009 Oct]Heat Wave 热浪 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 301  Solved: 223 [ ...

  3. bzoj 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题(DP)

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

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

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

  5. bzoj 3405: [Usaco2009 Open]Grazing2 移动牛棚(DP)

    3405: [Usaco2009 Open]Grazing2 移动牛棚 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 55  Solved: 32 [ ...

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

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

  7. 【BZOJ3407】[Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题【01背包】

    [题目链接] ... /* Pigonometry */ #include <cstdio> #include <algorithm>using namespace std;c ...

  8. [Usaco2009 Oct]Heat Wave 热浪

    题目描述 有一个 n个点 m 条边的无向图,请求出从 s 到 t 的最短路长度. 输入格式第一行四个正整数 n, m, s, t. 接下来 m 行,每行三个正整数 u, v, w,表示一条连接 u, ...

  9. ECCV2022论文列表(中英对照)

    Paper ID Paper Title 论文标题 8 Learning Uncoupled-Modulation CVAE for 3D Action-Conditioned Human Motio ...

最新文章

  1. 输出值(1)初始化输出值
  2. 每日一皮:这是个有趣的妹子...
  3. 如何将外部邮箱添加至Exchange邮件组中
  4. .Net Core + 微信赋能企业级智能客服系统--学习笔记
  5. jquery实现导航栏鼠标点击后实行背景高亮,点击离开恢复(超级简单!!!!)...
  6. 本硕一致计算机科学与技术专业介绍,哈尔滨理工大学计算机科学与技术专业介绍...
  7. AIR Android开发--APK结构详解
  8. wincc如何实现web发布,及具体方法
  9. 虚拟机运行闪讯 实现linux联网 (多图)
  10. 美国拉斯维加斯游戏CRAPS(花旗骰)掷骰子的游戏的C语言版本
  11. 杀毒软件已经进入空前弱智与混沌状态
  12. RIME鼠须管保姆级五笔配置教程
  13. mysql连接泄露 定位_数据库连接泄漏
  14. 876. 链表的中间结点【我亦无他唯手熟尔】
  15. 聚美优品启动上市,真的那么赚钱吗?
  16. Types of light 光照类型 光照系列4
  17. 好玩的centos代码简介()
  18. java日志体系分析
  19. 申诉解决TeamViewer免费个人版被误判为商业使用
  20. 应用和产业齐步走(转)

热门文章

  1. Linux下mysql5.1修改密码,Linux下MySQL忘记密码
  2. 债券指数(Bond Index)
  3. 一步一步部署SSIS包图解教程1
  4. 关闭钩子(ShutdownHook)
  5. racle B-Tree和Bitmap索引对比详解
  6. 用Java读取xml文件内容
  7. dede文章调用时过滤调 body里面的style属性和值
  8. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
  9. xaml中的布局面板
  10. 用netsh自动切换IP