2017.8.7 联考水题 Passward kmp/hash 字符串

你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s。

传说打开庙门的密码是这个字符串的一个子串 t,并且 t 既是 s 的前缀又是 s 的后缀并且还在 s 的中间位置出现过一次。

如果存在这样的串,请你输出这个串,如有多个满足条件的串,输出最长的那一个。

如果不存在这样的串,输出"Just a legend"(去掉引号)。

输入格式:

仅一行,字符串 s。

输出格式:

如题所述

样例输入

fixprefixsuffix

样例输出:

fix

数据范围:

对于 60%的数据, s 的长度<=100

对于 100%的数据, s 的长度<=100000

solution

这个题真是水

但是我第三次 眼瞎?理解错题意?好像都有

出现过一次  与  只出现一次  真的不一样........

明明昨天的总结都说了这个事了...........

那再来个措施吧:  看题的时候全屏看,把字放到最大

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #define mem(a,b) memset(a,b,sizeof(a))
 5 using namespace std;
 6 const int N=100066;
 7
 8 char s[N];
 9 int fail[N],n,len;
10
11 void kmp()
12 {
13     n=strlen(s);
14     fail[0]=0;
15     fail[1]=0;
16     for(int i=2,k=0;i<=n;++i)
17     {
18         while(k&&s[i-1]!=s[k])
19           k=fail[k];
20         if(s[i-1]==s[k])
21           ++k;
22         fail[i]=k;
23     }
24 }
25
26 void match()
27 {
28     int kk=n;
29     int flag=0;
30     while(fail[kk])
31     {
32         int sum=0;
33         len=fail[kk];
34         for(int i=0;i<len;++i)
35           s[i]=s[i];
36         for(int i=1,k=0;i<n-1;++i)
37         {
38             while(k&&s[i]!=s[k])
39               k=fail[k];
40             if(s[i]==s[k])
41               ++k;
42             if(k==len)
43               ++sum;
44         }
45         if(sum)
46         {
47             flag=1;
48           break;
49         }
50         kk=fail[kk];
51     }
52     if(flag)
53       for(int i=0;i<fail[kk];++i)
54         printf("%c",s[i]);
55     else
56       printf("Just a legend");
57 }
58
59 int main(){
60     scanf("%s",s);
61     kmp();
62     match();
63     //while(1);
64     return 0;
65 }

code

时间: 2024-07-30 00:56:33

2017.8.7 联考水题 Passward kmp/hash 字符串的相关文章

【2017杭二联考】 图的有向环

P2555 - [2017杭二联考]图的有向环 Description 题目背景: 幻想乡的亡灵公主,西行寺幽幽子,在幻想乡很受欢迎,经常有妖怪来拜访她,但是幽 幽子并不喜欢被打扰,她希望从白玉楼出发,散步之后再回到白玉楼,同时路上遇到的妖怪 越少越好(有趣的是道路两边的妖怪数量并不相同,分别从两个方向经过同一条道路遇到的 妖怪数量是不同的).当然,作为冥界的公主,她是不会重复经过同一条道路的. 问题描述: 给定一个有 n 个点 m 条无向边的图,每条无向边最多只能经过一次. 对于边(ui, v

【2017杭二联考】穿越矩形

P2554 - [2017杭二联考]穿越矩形 Description 题目背景: 幻想乡的创始人之一,八云紫,有着强大的控制结界的能力,可以瞬间消除一定范围内 所有弹幕.我们可以将其消除范围视为一个矩形,而弹幕可以视为动点. 八云紫想要嘲讽她的敌人,所以她希望只使用一次消除能力,尽可能多地消除弹幕. 请你告诉她,在哪一时刻使用道具,可以消除尽可能多的弹幕. 问题描述: 在平面上给定一个矩形区域(也可能退化成线段或者点). 矩形的边与坐标轴平行,左下端 点为 (xl,yl),右上端点为 (xr,y

2017.8.7 联考 期望的一个奇怪的题 书

Hazel有n本书,编号1为n到 ,叠成一堆.当她每次抽出一本书的时候,上方的书会因重力而下落,这本被取出的书则会被放置在书堆顶. 每次有pi的概率抽取编号为i的书.她每次抽书所消耗的体力与这本书在这堆中是第几本成正比.具体地,抽取堆顶的书所耗费体力值为1 ,抽取第二本耗费体力值为2 ,以此类推. 现在 想知道,在很久很久以后(可以认为几乎是无穷的),她每次抽书所耗费的体力的期望值是多少. 最终的答案显然可以表示成a/b的形式,请输出a*(b^-1)模1e9+7的值. [输入格式] 第一行一个整

2017.8.7 联考 就 贪心(有反悔策略)

[背景描述] 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. [输入格式] 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i 个整数表示 Ai . [输出格式] 一行一个整数表示最大和, 请注意答案可能会超过 int 范围 [样例输入] 3 2 4 5 3 [样例输出] 7 [数据范围] 对于 20% 的数据, N, K ≤ 20 . 对于 40% 的数据, N, K ≤ 1000 . 对于 60% 的数据, N,

水题 Codeforces Beta Round #70 (Div. 2) A. Haiku

题目传送门 1 /* 2 水题:三个字符串判断每个是否有相应的元音字母,YES/NO 3 下午网速巨慢:( 4 */ 5 #include <cstdio> 6 #include <cstring> 7 #include <string> 8 #include <iostream> 9 #include <algorithm> 10 #include <cmath> 11 using namespace std; 12 13 cons

bzoj千题计划265:bzoj4873: [六省联考2017]寿司餐厅

http://www.lydsy.com/JudgeOnline/problem.php?id=4873 选a必选b,a依赖于b 最大权闭合子图模型 构图: 1.源点 向 正美味度区间 连 流量为 美味度 的边 2.负美味度区间 向 汇点 连 流量为 美味度的绝对值 的边 3.区间[i,j] 向 区间[i+1,j].区间[i,j-1] 连 流量为 inf 的边 4.区间[i,i] 向 寿司i 连 流量为 inf 的边 5.寿司i 向 汇点 连 流量为 寿司代号 的边 6.寿司i 向 它的代号 连

bzoj千题计划266:bzoj4872: [六省联考2017]分手是祝愿

http://www.lydsy.com/JudgeOnline/problem.php?id=4872 一种最优解是 从大到小灯有亮的就灭掉 最优解是唯一的,且关灯的顺序没有影响 最优解 对每个开关至多操作1次,(连带着的灯的亮灭改变不算) 设最优解 需要操作cnt次,那么就有cnt盏灯是正确的选择 设 f[i] 表示 有i种正确的选择  变为 有i-1种正确的选择 的 期望次数 那么在n盏灯中,有i盏灯操作1次 就可以 减少一次正确选择 有n-i盏灯是错误的选择,选了它还要把它还原,还原它也

(最新)2017年下半年软考各科历年真题及答案解析

[徐朋出品,必属精品]作为51CTO学院的软考特级讲师,本着对广大学员负责的态度,在每年同学们参加完软考考试,我都会尽早的给大家发布各科的真题详细解析资料.一方面是为了帮助参加软考考试的同学对自己考试情况做一个准确评估:另一方面是为未来参加软考考试的学员展现软考最新的考题形式,考察要点,助其有重点的复习软考考试. 历时多载,是同学们的坚定支持,才使我更加坚定,勇往直前,做更好的课程回馈大家. 现将最新的软考各科资料整理如下,同学们可以自行下载学习,学习过程中有疑问,也可给我留言. [持续更新,未

P3746 [六省联考2017]组合数问题

P3746 [六省联考2017]组合数问题 \(dp_{i,j}\)表示前\(i\)个物品,取的物品模\(k\)等于\(r\),则\(dp_{i,j}=dp_{i-1,(j-1+k)%k}+dp_{i-1,j}\) \(dp_{i,0},dp_{i,1},dp_{i,2}.....dp_{i,k-1}\) \(\Longrightarrow\) \(dp_{i+1,0},dp_{i+1,1},dp_{i+1,2}.....dp_{i+1,k-1}\) 仔细想想,你能构造出矩阵的 #include