sdut2784cf 126b Good Luck!(next数组)
链接
next数组的巧妙应用 学弟出给学弟的学弟的题。。
求最长的 是前缀也是后缀同时也是中缀的串 next的数组求的就是最长的前后缀 但是却不能求得中缀
所以这里 就把尾部去掉之后再求 这样就可以保证是中缀了 先把所有既是前缀也是后缀的长度的求出来标记 然后再去掉尾部 求一下最大 既是前缀又是后缀的长度
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 #include<queue> 8 #include<vector> 9 using namespace std; 10 #define INF 0xfffffff 11 #define N 1000010 12 char s[N]; 13 int next[N]; 14 int vis[N]; 15 void kmp(int k) 16 { 17 int i,j=-1; 18 next[0] = -1; 19 for(i = 1 ; i < k ; i++) 20 { 21 while(j>-1&&s[i]!=s[j+1]) 22 j = next[j]; 23 if(s[i]==s[j+1]) 24 j++; 25 next[i] = j; 26 } 27 } 28 int main() 29 { 30 //freopen("data.in","r",stdin); 31 //freopen("data1.out","w",stdout); 32 int n,i; 33 int kk=1; 34 cin>>n; 35 while(n--) 36 { 37 memset(vis,0,sizeof(vis)); 38 memset(next,0,sizeof(next)); 39 cin>>s; 40 int k = strlen(s); 41 kmp(k); 42 int len = next[k-1]; 43 vis[len] = 1; 44 while(len!=-1) 45 { 46 vis[next[len]] = 1; 47 len = next[len]; 48 } 49 int mm = 0; 50 for(i = 0 ; i < k-1 ; i++) 51 if(vis[next[i]]) mm = max(mm,next[i]+1); 52 if(mm) 53 { 54 for(i = 0 ;i < mm ; i++) 55 cout<<s[i]; 56 puts(""); 57 } 58 else 59 puts("Bad Luck!"); 60 } 61 return 0; 62 } 63 64 /************************************** 65 Problem id : SDUT OJ 2784 66 User name : shang 67 Result : Accepted 68 Take Memory : 9240K 69 Take Time : 180MS 70 Submit Time : 2014-02-15 15:57:03 71 **************************************/
View Code
转载于:https://www.cnblogs.com/shangyu/p/3550620.html
sdut2784cf 126b Good Luck!(next数组)相关推荐
- 269道各路算法考试题集锦
1 某编程大赛题(35道题,中等难度) 1.在实际的开发工作中,对于string的处理是最常见的编程任务,本题是要求程序对用户输入的string进行处理,具体要求如下: 1.每个单词的首字母变为大写. ...
- CodeForces - 126B Password(KMP中next数组)
题目链接:点击查看 题目大意:给出一个字符串s,要求在字符串中找出一个子字符串t,要求t在s中出现了至少三次,一次在前缀,一次在后缀,一次在中间 注意一下,这里的前缀不能包括最后一个字母,后缀不能包括 ...
- HDU4080 Stammering Aliens(二分 + 后缀数组)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4080 Description Dr. Ellie Arroway has establish ...
- OC中的数组,常使用的函数,怎样将字符串写到文件中,将数组写到文件中
现在我要解决的问题是什么,怎样将字符串写到文件中 NSString *str1=@"Hello World";//首先是定义一个字符串,也就是要操作的字符串 NSString *f ...
- 【LeetCode 剑指offer刷题】数组题2:57 有序数组中和为s的两个数(167 Two Sum II - Input array is sorted)...
[LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 57 有序数组中和为s的两个数 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是 ...
- 如何在C++中动态建立二维数组
一维数组是指针,可将二维数组看作是指针的指针:每一行是一个一维数组,而列是指向行的指针.在动态创建时,先分配指向行的指针空间,再循环维每一行申请空间. #include<iostream> ...
- Java 基础——数组解析
数组对于每一门编辑应语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java语言中提供的数组是用来存储固定大小的同类型元素. 可以声明一个数组变量,如numbers[100 ...
- 【HDU - 1847】Good Luck in CET-4 Everybody! (巴什博奕,PN图或sg函数)
题干: 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici ...
- java android 数组_Android开发基础之Java 数组
Java 数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如 n ...
最新文章
- Abaqus用户子程序umat的学习
- 005_CSS通配符选择器
- 特征工程(2):特征构建
- GIT 团队协作快速入门使用
- SpringMVC的请求-文件上传-单文件上传的代码实现1
- Android报“android.content.res.Resources$NotFoundException: String resource ID #0x2”错误
- Microduino中LM75温度传感器的使用
- 希望查询windows下安装cygwin后ssh服务无法启动的解决办法
- struts2中页面访问action的url问题,或许很简单
- 测试面试问道MySQL_Mysql精华总结,解决测试人员面试中碰到的一切Mysql问题(二)...
- cuda Device Management
- C语言学习笔记---时间函数clock()和time()
- HDU 1084:What Is Your Grade?
- transductive inference(转导推理,直推式学习)
- python求积分面积的几个方法
- 关于CAN总线的布线
- 【2016NOIP十连测】【test4】【状压DP】【容斥原理】巨神兵
- 【算法笔记】莫队算法(基础莫队,带修莫队,回滚莫队,树上莫队,二次离线莫队)
- WWW 2017精选论文
- SpringCloud学习笔记(五)服务发现Discovery
热门文章
- 您的光纤电缆和测试仪是否准备好用于400G以太网?
- Spring系列(五):@Lazy懒加载注解用法介绍
- 36 张图梳理 Intellij IDEA 常用设置,太全了值得收藏!
- 鸿蒙和安卓,到底有什么区别?
- 程序大佬和菜鸟的区别,太准确了!
- mysql 5.5 压力测试,mysql 压力测试
- 前端开发时间格式的转换方法_开发人员投资时间而不浪费时间的10种方法
- 「前端组件化」该怎么理解?
- go 中gcc 编译问题(gcc.exe fatal error no input files compilation terminated)
- IDEA svn 菜单不见了,解决方法