题目链接:poj_1743_Musical Theme

题意:

给你一串数字,让你找最长的变化相同不重叠的子串,至少长度为5

题解:

处理数据后用后缀数组加二分答案,然后用height数组check答案,运用height数组求相同不重叠的子串经典运用

  1. #include<cstdio>
  2. #include<algorithm>
  3. #define F(i,a,b) for(int i=a;i<=b;i++)
  4. using namespace std;
  5.  
  6. namespace suffixarray{
  7. #define FN(n) for(int i=0;i<n;i++)
  8. const int N =2E4+;
  9. int rnk[N],sa[N],height[N],c[N],s[N];
  10. void getsa(int n,int m,int *x=rnk,int *y=height){
  11. FN(m)c[i]=;FN(n)c[x[i]=s[i]]++;FN(m)c[i+]+=c[i];
  12. for(int i=n-;i>=;i--)sa[--c[x[i]]]=i;
  13. for(int k=,p;p=,k<=n;k=p>=n?N:k<<,m=p){
  14. for(int i=n-k;i<n;i++)y[p++]=i;
  15. FN(n)if(sa[i]>=k)y[p++]=sa[i]-k;
  16. FN(m)c[i]=;FN(n)c[x[y[i]]]++;FN(m)c[i+]+=c[i];
  17. for(int i=n-;i>=;i--)sa[--c[x[y[i]]]]=y[i];
  18. swap(x,y),p=,x[sa[]]=;
  19. for(int i=;i<n;i++)
  20. x[sa[i]]=y[sa[i-]]==y[sa[i]]&&y[sa[i-]+k]==y[sa[i]+k]?p-:p++;
  21. }
  22. FN(n)rnk[sa[i]]=i;
  23. for(int i=,j,k=;i<n-;height[rnk[i++]]=k)
  24. for(k=k?k-:k,j=sa[rnk[i]-];s[i+k]==s[j+k];k++);
  25. }
  26. }
  27.  
  28. using namespace suffixarray;
  29. int n;
  30. inline void upd(int &a,int b){if(a>b)a=b;}
  31. inline void upu(int &a,int b){if(a<b)a=b;}
  32.  
  33. inline bool check(int x)
  34. {
  35. int l=N,r=;
  36. F(i,,n)
  37. {
  38. if(height[i]>=x)
  39. {
  40. upd(l,sa[i]),upu(r,sa[i]);
  41. if(r-l>=x)return ;
  42. }else l=r=sa[i];
  43. }
  44. return ;
  45. }
  46.  
  47. int main()
  48. {
  49. while(scanf("%d",&n),n)
  50. {
  51. F(i,,n-)scanf("%d",s+i);
  52. if(n<){puts("");continue;}
  53. F(i,,n-)s[i]=s[i+]-s[i]+;
  54. s[--n]=,getsa(n+,);
  55. int l=,r=n,mid;
  56. while(l<=r)mid=(l+r)>>,check(mid)?l=mid+:r=mid-;
  57. printf("%d\n",l<?:l);
  58. }
  59. return ;
  60. }

poj_1743_Musical Theme(后缀数组)的更多相关文章

  1. POJ1743 Musical Theme [后缀数组]

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 27539   Accepted: 9290 De ...

  2. POJ 1743 Musical Theme 后缀数组 最长重复不相交子串

    Musical ThemeTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=1743 Description ...

  3. POJ1743 Musical Theme [后缀数组+分组/并查集]

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 27539   Accepted: 9290 De ...

  4. poj 1743 Musical Theme (后缀数组+二分法)

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16162   Accepted: 5577 De ...

  5. POJ1743 Musical Theme —— 后缀数组 重复出现且不重叠的最长子串

    题目链接:https://vjudge.net/problem/POJ-1743 Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Tot ...

  6. Poj 1743 Musical Theme(后缀数组+二分答案)

    Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 28435 Accepted: 9604 Descri ...

  7. [poj 1743] Musical Theme 后缀数组 or hash

    Musical Theme 题意 给出n个1-88组成的音符,让找出一个最长的连续子序列,满足以下条件: 长度大于5 不重叠的出现两次(这里的出现可以经过变调,即这个序列的每个数字全都加上一个整数x) ...

  8. POJ 1743 Musical Theme ——后缀数组

    [题目分析] 其实找最长的不重叠字串是很容易的,后缀数组+二分可以在nlogn的时间内解决. 但是转调是个棘手的事情. 其实只需要o(* ̄▽ ̄*)ブ差分就可以了. 背板题. [代码] #include ...

  9. [Poj1743] [后缀数组论文例题] Musical Theme [后缀数组不可重叠最长重复子串]

    利用后缀数组,先对读入整数处理str[i]=str[i+1]-str[i]+90这样可以避免负数,计算Height数组,二分答案,如果某处H<lim则将H数组分开,最终分成若干块,判断每块中是否 ...

随机推荐

  1. jmeter压力测试的简单实例+badboy脚本录制(一个简单的网页用户登录测试的结果)

    JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...

  2. json的细节

    之前一直纳闷为什么在js里直接写的json数据可以不用eval()直接解析,而后台传入ajax的json数据需要eval()一下才能解析 原来是我没搞清楚json格式字符串跟json对象 var te ...

  3. 面试题-Java Web-网络通信

    1.HTTP响应的结构是怎么样的? HTTP响应由三个部分组成:状态码(Status Code):描述了响应的状态.可以用来检查是否成功的完成了请求.请求失败的情况下,状态码可用来找出失败的原因.如果 ...

  4. zabbix 布署实践【1 server安装】

    通过openstack环境,开通了2台只有根分区的虚拟机,   目的是为了监控公司所有的物理机,网络设备,虚拟机,总计300个台以上,推荐配置,zabbix官方文档是有给出指引的   环境:CentO ...

  5. validate验证

    导入需要的js          自动验证 <script src="${ctx }/static/assets/js/jquery-2.1.4.min.js">< ...

  6. window的常用属性

    常用属性: 1.closed:用于判断一个指向window对象的引用是否已关闭.请看下面代码: var newWnd = window.open("NewURL.htm",&quo ...

  7. HttpRequestMessage

    mvc4中的WEBAPI,发现接收参数不是很方便,跟传统的request.querystring和request.form有很大区别,在网上搜了一大圈,各种方案都有,但不是太详细,于是跟踪Action ...

  8. AppDelegate 里一个基本的跳转方法,用来在rootView崩溃的时候直接调试我自己的页面

    将 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)lau ...

  9. 使用Java注解开发自动生成SQL

    使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...

  10. 移动端默认返回按键,使用h5+修改默认事件

    hbuilder的h5+提供开发webapp的诸多便利,很多手机自带back虚拟按键,如果不修改其默认事件,点一下app就退出了,所以我这里提供一种修改这个按键默认事件事件的代码. 首先你要用hbui ...