poj_1743_Musical Theme(后缀数组)
题意:
给你一串数字,让你找最长的变化相同不重叠的子串,至少长度为5
题解:
处理数据后用后缀数组加二分答案,然后用height数组check答案,运用height数组求相同不重叠的子串经典运用
- #include<cstdio>
- #include<algorithm>
- #define F(i,a,b) for(int i=a;i<=b;i++)
- using namespace std;
- namespace suffixarray{
- #define FN(n) for(int i=0;i<n;i++)
- const int N =2E4+;
- int rnk[N],sa[N],height[N],c[N],s[N];
- void getsa(int n,int m,int *x=rnk,int *y=height){
- FN(m)c[i]=;FN(n)c[x[i]=s[i]]++;FN(m)c[i+]+=c[i];
- for(int i=n-;i>=;i--)sa[--c[x[i]]]=i;
- for(int k=,p;p=,k<=n;k=p>=n?N:k<<,m=p){
- for(int i=n-k;i<n;i++)y[p++]=i;
- FN(n)if(sa[i]>=k)y[p++]=sa[i]-k;
- FN(m)c[i]=;FN(n)c[x[y[i]]]++;FN(m)c[i+]+=c[i];
- for(int i=n-;i>=;i--)sa[--c[x[y[i]]]]=y[i];
- swap(x,y),p=,x[sa[]]=;
- for(int i=;i<n;i++)
- x[sa[i]]=y[sa[i-]]==y[sa[i]]&&y[sa[i-]+k]==y[sa[i]+k]?p-:p++;
- }
- FN(n)rnk[sa[i]]=i;
- for(int i=,j,k=;i<n-;height[rnk[i++]]=k)
- for(k=k?k-:k,j=sa[rnk[i]-];s[i+k]==s[j+k];k++);
- }
- }
- using namespace suffixarray;
- int n;
- inline void upd(int &a,int b){if(a>b)a=b;}
- inline void upu(int &a,int b){if(a<b)a=b;}
- inline bool check(int x)
- {
- int l=N,r=;
- F(i,,n)
- {
- if(height[i]>=x)
- {
- upd(l,sa[i]),upu(r,sa[i]);
- if(r-l>=x)return ;
- }else l=r=sa[i];
- }
- return ;
- }
- int main()
- {
- while(scanf("%d",&n),n)
- {
- F(i,,n-)scanf("%d",s+i);
- if(n<){puts("");continue;}
- F(i,,n-)s[i]=s[i+]-s[i]+;
- s[--n]=,getsa(n+,);
- int l=,r=n,mid;
- while(l<=r)mid=(l+r)>>,check(mid)?l=mid+:r=mid-;
- printf("%d\n",l<?:l);
- }
- return ;
- }
poj_1743_Musical Theme(后缀数组)的更多相关文章
- POJ1743 Musical Theme [后缀数组]
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 27539 Accepted: 9290 De ...
- POJ 1743 Musical Theme 后缀数组 最长重复不相交子串
Musical ThemeTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=1743 Description ...
- POJ1743 Musical Theme [后缀数组+分组/并查集]
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 27539 Accepted: 9290 De ...
- poj 1743 Musical Theme (后缀数组+二分法)
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16162 Accepted: 5577 De ...
- POJ1743 Musical Theme —— 后缀数组 重复出现且不重叠的最长子串
题目链接:https://vjudge.net/problem/POJ-1743 Musical Theme Time Limit: 1000MS Memory Limit: 30000K Tot ...
- Poj 1743 Musical Theme(后缀数组+二分答案)
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 28435 Accepted: 9604 Descri ...
- [poj 1743] Musical Theme 后缀数组 or hash
Musical Theme 题意 给出n个1-88组成的音符,让找出一个最长的连续子序列,满足以下条件: 长度大于5 不重叠的出现两次(这里的出现可以经过变调,即这个序列的每个数字全都加上一个整数x) ...
- POJ 1743 Musical Theme ——后缀数组
[题目分析] 其实找最长的不重叠字串是很容易的,后缀数组+二分可以在nlogn的时间内解决. 但是转调是个棘手的事情. 其实只需要o(* ̄▽ ̄*)ブ差分就可以了. 背板题. [代码] #include ...
- [Poj1743] [后缀数组论文例题] Musical Theme [后缀数组不可重叠最长重复子串]
利用后缀数组,先对读入整数处理str[i]=str[i+1]-str[i]+90这样可以避免负数,计算Height数组,二分答案,如果某处H<lim则将H数组分开,最终分成若干块,判断每块中是否 ...
随机推荐
- jmeter压力测试的简单实例+badboy脚本录制(一个简单的网页用户登录测试的结果)
JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...
- json的细节
之前一直纳闷为什么在js里直接写的json数据可以不用eval()直接解析,而后台传入ajax的json数据需要eval()一下才能解析 原来是我没搞清楚json格式字符串跟json对象 var te ...
- 面试题-Java Web-网络通信
1.HTTP响应的结构是怎么样的? HTTP响应由三个部分组成:状态码(Status Code):描述了响应的状态.可以用来检查是否成功的完成了请求.请求失败的情况下,状态码可用来找出失败的原因.如果 ...
- zabbix 布署实践【1 server安装】
通过openstack环境,开通了2台只有根分区的虚拟机, 目的是为了监控公司所有的物理机,网络设备,虚拟机,总计300个台以上,推荐配置,zabbix官方文档是有给出指引的 环境:CentO ...
- validate验证
导入需要的js 自动验证 <script src="${ctx }/static/assets/js/jquery-2.1.4.min.js">< ...
- window的常用属性
常用属性: 1.closed:用于判断一个指向window对象的引用是否已关闭.请看下面代码: var newWnd = window.open("NewURL.htm",&quo ...
- HttpRequestMessage
mvc4中的WEBAPI,发现接收参数不是很方便,跟传统的request.querystring和request.form有很大区别,在网上搜了一大圈,各种方案都有,但不是太详细,于是跟踪Action ...
- AppDelegate 里一个基本的跳转方法,用来在rootView崩溃的时候直接调试我自己的页面
将 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)lau ...
- 使用Java注解开发自动生成SQL
使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...
- 移动端默认返回按键,使用h5+修改默认事件
hbuilder的h5+提供开发webapp的诸多便利,很多手机自带back虚拟按键,如果不修改其默认事件,点一下app就退出了,所以我这里提供一种修改这个按键默认事件事件的代码. 首先你要用hbui ...