[USACO5.1] 乐曲主题Musical Themes
题目链接:戳我
Emmm......hash怎么做啊不会啊
这里是SA后缀数组版本的
就是先两两做差分,作为要处理后缀的数组。普通地求出来h数组之后,我们二分这个答案,然后判定是否合法就行了。是否合法即\(min(sa[j])+h[i]<max(sa[j]),j<=i\)
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define MAXN 100010
using namespace std;
int n,m,p;
int a[MAXN],b[MAXN],tp[MAXN],tax[MAXN],rnk[MAXN],sa[MAXN],h[MAXN];
inline void qsort()
{
for(int i=1;i<=m;i++) tax[i]=0;
for(int i=1;i<=n;i++) tax[rnk[i]]++;
for(int i=1;i<=m;i++) tax[i]+=tax[i-1];
for(int i=n;i>=1;i--) sa[tax[rnk[tp[i]]]--]=tp[i];
}
inline void suffix_sort()
{
m=MAXN,p=0;
for(int i=1;i<=n;i++) rnk[i]=b[i],tp[i]=i;
qsort();
for(int w=1;p<n;m=p,w<<=1)
{
p=0;
for(int i=1;i<=w;i++) tp[++p]=n+i-w;
for(int i=1;i<=n;i++) if(sa[i]-w>0) tp[++p]=sa[i]-w;
qsort();
swap(rnk,tp);
p=rnk[sa[1]]=1;
for(int i=2;i<=n;i++)
rnk[sa[i]]=(tp[sa[i]]==tp[sa[i-1]]&&tp[sa[i]+w]==tp[sa[i-1]+w])?p:++p;
}
}
inline void get_h()
{
int j,k=0;
for(int i=1;i<=n;i++)
{
if(k) k--;
int j=sa[rnk[i]-1];
while(b[i+k]==b[j+k]) k++;
h[rnk[i]]=k;
}
// for(int i=1;i<=n;i++) printf("rnk[%d]=%d\n",i,rnk[i]);
// for(int i=1;i<=n;i++) printf("h[%d]=%d\n",i,h[i]);
}
inline bool check(int x)
{
int minn=n,maxx=0;
for(int i=2;i<=n;i++)
{
if(h[i]>=x)
minn=min(minn,min(sa[i],sa[i-1])),maxx=max(maxx,max(sa[i],sa[i-1]));
if(h[i]<x||i==n)
{
if(minn+x<maxx) return true;
minn=n,maxx=0;
}
}
return false;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
n--;
for(int i=1;i<=n;i++) b[i]=a[i+1]-a[i]+88;
// for(int i=1;i<=n;i++) printf("b[%d]=%d\n",i,b[i]);
suffix_sort();
get_h();
int l=0,r=n,ans;
while(l<=r)
{
int mid=(l+r)>>1;
// printf("l=%d r=%d mid=%d\n",l,r,mid);
if(check(mid)) ans=mid,l=mid+1;
else r=mid-1;
}
if(ans<4||ans>(n+1)/2) printf("0\n");
else printf("%d\n",ans+1);
return 0;
}
[USACO5.1] 乐曲主题Musical Themes的更多相关文章
- Luogu P2743 [USACO5.1]乐曲主题Musical Themes
链接 \(Click\) \(Here\) 人生第一道后缀数组的题目.首先要对输入的串进行差分处理,差分后长度为(\(n - 1\))的相同子段就是原串中长度为\(n\)的相同(可变调)子段.求出来\ ...
- 洛谷P2743 乐曲主题Musical Themes [USACO5.1] SA
正解:SA 解题报告: 传送门 这题三个条件嘛,那就一个个考虑下都解决了就把这题解决了嘛QwQ 那就直接分别针对三个条件写下各个击破就欧克辣? 1)长度大于等于5:求出答案之后和5比大小 2)不能有公 ...
- 乐曲主题Musical Themes
SA例题 题面 对于串 \(S\) 的两个子串 \(A\) 和 \(B\) ,满足 \(k = |A| = |B|\),\(\exists c \forall i\, a_i + c=b_i\),且 ...
- P2743(poj1743) Musical Themes[差分+后缀数组]
P2743 乐曲主题Musical Themes(poj1743) 然后呢这题思路其实还是蛮简单的,只是细节特别多比较恶心,忘记了差分带来的若干疏漏.因为转调的话要保证找到相同主题,只要保证一段内相对 ...
- [转]jQuery EasyUI 扩展-- 主题(Themes)
主题(Themes)允许您改变站点的外观和感观.使用主题可以节省设计的时间,让您腾出更多的时间进行开发.您也可以创建一个已有主题的子主题. 主题生成器(Theme Builder) jQuery UI ...
- USACO Section 5.1 Musical Themes(枚举)
直接枚举O(n^3)会TLE,只要稍微加点优化,在不可能得到更优解时及时退出.其实就是道水题,虽说我提交了6次才过= =..我还太弱了 -------------------------------- ...
- USACO 5.1 Musical Themes(哈希+二分)
Musical ThemesBrian Dean A musical melody is represented as a sequence of N (1 <= N <= 5000) n ...
- [USACO5.1] Musical Themes
后缀数组求最长重复且不重叠子串. poj 1743 传送门 洛谷 P2743 传送门 1.子串可以“变调”(即1 3 6和3 5 8视作相同).解决办法:求字符串相邻元素的差形成新串.用新字符串求解最 ...
- Android应用开发中的风格和主题(style,themes)
http://www.cnblogs.com/playing/archive/2011/04/01/2002469.html 越来越多互联网企业都在Android平台上部署其客户端,为了提升用户体验, ...
随机推荐
- sobel 使用说明
转自http://www.cnblogs.com/justany/archive/2012/11/23/2782660.html OpenCV 2.4+ C++ 边缘梯度计算 2012-11-23 0 ...
- SSH三大框架需要的配置文件
1. Struts2框架 * 在web.xml中配置核心的过滤器 <filter> <filter-name>struts2</filter-name> <f ...
- jmeter完成数据批量添加
Jmeter结构如图 目的: 需要在每个组织下面分别添加5个设备资源 思路: 1.先登录平台 2.进入系统配置页面 3.获取到每个区域的ID 4.在每个区域下面添加设备资源 重点及难点: 1.登录加密 ...
- Linux wget命令
一.简介 wget是一个Linux系统中的下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS ...
- [python] can not find app ,module
can not find module 1 startapp appname 而不是 startproject 2 不要自己创建项目根目录,要用mamage.py生成 can not find app ...
- zeromq学习记录(二)天气更新服务器使用ZMQ_SUB ZMQ_PUB
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- action spring 注入错误,如果检查各项注入都没有错误时,考虑struts 是否配置了namespace(如果你有多个namespace="/")
[ERROR] 2015-01-04 09:42:35,180 (CommonsLogger.java:38) - Exception occurred during processing reque ...
- jquery 插入节点的方法
方法 描述 示例 append() 向每个匹配的元素内部追加内容 HTML代码: <p>我想说:</p> jQuery代码: $("p").append(& ...
- 在使用html5的video标签播放视频时为何只有声音却没有图像
在使用html5的video标签播放视频时为何只有声音却没有图像? 答:使用格式化工厂转个编码就行了,MP4有3种编码,mpg4(xdiv),,mpg4(xvid),avc(h264)转换成H264编 ...
- 做SEO都需要具备哪些方面的知识
做seo需要了解的基本知识有利于seo工作的进行 一.了解搜索引擎的工作原理 搜索引擎的基本工作原理包括如下三个过程: 1.首先在互联网中发现.搜集网页信息; 2.同时对信息进行提取和组织建立索引库; ...