PAT T1005 Programming Pattern
建立后缀数组,遍历height数组找到连续大于len的最长子序列~
- #include<bits/stdc++.h>
- using namespace std;
- const int maxn=1e7+;
- char s[maxn];
- int n;
- int rk[maxn];
- int sa[maxn];
- int height[maxn];
- int tmp[maxn];
- int c[maxn];
- int t1[maxn];
- int t2[maxn];
- void build_sa (char s[],int n,int m) {
- int i,j,p;
- int *x=t1;
- int *y=t2;
- for (i=;i<m;i++) c[i]=;
- for (i=;i<n;i++) c[x[i]=s[i]]++;
- for (i=;i<m;i++) c[i]+=c[i-];
- for (i=n-;i>=;i--) sa[--c[x[i]]]=i;
- for (j=;j<=n;j<<=) {
- p=;
- for (i=n-j;i<n;i++) y[p++]=i;
- for (i=;i<n;i++) if (sa[i]>=j) y[p++]=sa[i]-j;
- for (i=;i<m;i++) c[i]=;
- for (i=;i<n;i++) c[x[y[i]]]++;
- for (i=;i<m;i++) c[i]+=c[i-];
- for (i=n-;i>=;i--) sa[--c[x[y[i]]]]=y[i];
- swap(x,y);
- p=;
- x[sa[]]=;
- for (i=;i<n;i++)
- x[sa[i]]=y[sa[i-]]==y[sa[i]]&&y[sa[i-]+j]==y[sa[i]+j]?p-:p++;
- if (p>=n) break;
- m=p;
- }
- }
- void getHeight (char s[],int n) {
- int i,j,k=;
- for (i=;i<=n;i++) rk[sa[i]]=i;
- for (i=;i<n;i++) {
- if (k) k--;
- j=sa[rk[i]-];
- while (s[i+k]==s[j+k]) k++;
- height[rk[i]]=k;
- }
- }
- int main () {
- int len;
- scanf ("%d",&len);
- getchar ();
- cin.getline (s,maxn);
- n=strlen(s);
- build_sa (s,n+,);
- getHeight (s,n);
- int cnt=;
- int res=;
- int ans=;
- for (int i=;i<=n;i++) {
- if (height[i]>=len) ans++;
- else ans=;
- if (sa[i]+len<=n&&cnt<ans) {
- cnt=ans;
- res=sa[i];
- }
- }
- for (int i=;i<len;i++)
- printf ("%c",s[res+i]);
- printf (" %d",cnt);
- return ;
- }
PAT T1005 Programming Pattern的更多相关文章
- PAT TOP 1005 Programming Pattern (35 分)哈希做法
1005 Programming Pattern (35 分) Programmers often have a preference among program constructs. For ex ...
- PAT (Top Level) Practise 1005 Programming Pattern (35)
后缀数组.排序之后得到height数组,然后从上到下将height>=len的都分为一组,然后找到第一组个数最多的输出即可. #pragma comment(linker, "/STA ...
- Game Programming Pattern
http://gameprogrammingpatterns.com/contents.html
- lazy ideas in programming
lazy形容词,懒惰的,毫无疑问是一个贬义词.但是,对于计算机领域,lazy却是非常重要的优化思想:把任务推迟到必须的时刻,好处是避免重复计算,甚至不计算.本文的目的是抛砖引玉,总结一些编程中的laz ...
- lazy ideas in programming(编程中的惰性思想)
lazy形容词,懒惰的,毫无疑问是一个贬义词.但是,对于计算机领域,lazy却是非常重要的优化思想:把任务推迟到必须的时刻,好处是避免重复计算,甚至不计算.本文的目的是抛砖引玉,总结一些编程中的laz ...
- Linux System Programming 学习笔记(七) 线程
1. Threading is the creation and management of multiple units of execution within a single process 二 ...
- PAT甲级——1025 PAT Ranking
1025 PAT Ranking Programming Ability Test (PAT) is organized by the College of Computer Science and ...
- Awesome Go
A curated list of awesome Go frameworks, libraries and software. Inspired by awesome-python. Contrib ...
- Go 语言相关的优秀框架,库及软件列表
If you see a package or project here that is no longer maintained or is not a good fit, please submi ...
随机推荐
- 概率dp 期望 逆推
题目大意: 从起点0点开始到达点n,通过每次掷色子前进,可扔出1,2,3,4,5,6这6种情况,扔到几前进几,当然对应飞行通道可以通过x直达一点y,x<y,计算到达n点或超过n 点要扔色子的次数 ...
- java.lang.OutOfMemoryError: GC overhead limit exceeded异常处理
今天写程序遇到个之前从没遇到的异常-----java.lang.OutOfMemoryError: GC overhead limit exceeded,下面附上解决方法 异常: 解决方法: 鼠标右击 ...
- RPA_播放语音
验证码识别 from rpa.captcha.captcha import Captcha c = Captcha() log.info(tmp_file_path) captcha_result = ...
- linux安装、使用优化、常用软件
定制自己的ubuntu桌面系统 一.安装ubuntu 1.下载ubuntu镜像Iso文件 ubuntu官网下载:https://cn.ubuntu.com/download 2.u盘写入 (1)下载U ...
- 在一个C程序中,main()函数可以放在哪?
C语言规定,在一个C程序中,main()函数的位置(). A.必须在系统调用的库函数之后 B.必须在程序的开始 C.必须在程序的最后 D.可以在任意位置 答案:D [解析] 每个C程序有且只有一个主函 ...
- 【ES6新增语法详述】
目录 1. 变量的定义 let const 2. 模版字符串 3. 数据解构 4. 函数扩展 设置默认值 箭头函数 5. 类的定义 class 6. 对象的单体模式 "@ ES6新增了关于变 ...
- UseIIS
asp.net core webapi的program.cs 文件中,要加上 使用IIS进程内,可以大幅提高处理速度
- 在 input 上添加图标字体时无法添加的问题
效果:一个搜索框.如图: 实施过程:一开始,将搜索框分为2部分,用2个 input ,一个 search ,一个 button ,然后给 type="button" 的input ...
- [Jenkins] Jenkins的启动停止并修改默认端口
在Win系统下面,经常使用Jenkins今天自动化测试工作,但是在搭建的时候还是有些坑 1.选择性安装: 一般会选择windows,会下载一个压缩包,然后step by step就可以安装成功,这个方 ...
- lintcode算法周竞赛
------------------------------------------------------------第七周:Follow up question 1,寻找峰值 寻找峰值 描述 笔记 ...