正解:SA

解题报告:

传送门

这题三个条件嘛,那就一个个考虑下都解决了就把这题解决了嘛QwQ

那就直接分别针对三个条件写下各个击破就欧克辣?

1)长度大于等于5:求出答案之后和5比大小

2)不能有公共部分:记录连续的满足hei>=d的子串的SA,如果max-min>=d就说明没有公共部分了

3)在乐曲中重复出现(可能经过转调:做个差就是一样儿的了

那就先跑个SA然后二分一下长度,check就是判断有麻油连续的满足hei>=d的满足SA的max-min>d

然后就做完了,,,

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=+;
int n,a[N],x[N],y[N],sa[N],rk[N],hei[N],t[N],l,r; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(ri gd,ri gs,ri k){return y[gd]==y[gs] && y[gd+k]==y[gs+k];}
il void SA()
{
ri m=;
rp(i,,n)++t[x[i]=a[i]];
rp(i,,m)t[i]+=t[i-];
my(i,n,)sa[t[x[i]]--]=i;
for(ri k=;k<=n;k<<=)
{
ri p=;
rp(i,,n)y[i]=;rp(i,,m)t[i]=;
rp(i,n-k+,n)y[++p]=i;
rp(i,,n)if(sa[i]>k)y[++p]=sa[i]-k;
rp(i,,n)++t[x[y[i]]];
rp(i,,m)t[i]+=t[i-];
my(i,n,)sa[t[x[y[i]]]--]=y[i];
swap(x,y);
x[sa[]]=p=;
rp(i,,n)x[sa[i]]=cmp(sa[i],sa[i-],k)?p:++p;
if(p>=n)break;
m=p;
}
rp(i,,n)rk[sa[i]]=i;
ri h=;
rp(i,,n)
{
if(h)--h;
while(a[i+h]==a[sa[rk[i]-]+h])++h;
hei[rk[i]]=h;
}
}
il bool check(ri lth)
{
ri mn=n,mx=;
rp(i,,n)
{
if(hei[i]<lth)mn=mx=sa[i];
else
{
mx=max(mx,sa[i]);mn=min(mn,sa[i]);if(mx-mn>lth)return true;
}
}
return false;
} int main()
{
// freopen("2743.in","r",stdin);freopen("2743.out","w",stdout);
r=n=read();rp(i,,n)a[i]=read();rp(i,,n)a[i]=a[i+]-a[i]+;SA();
while(l<r){ri mid=(l+r)>>;if(check(mid+))l=mid+;else r=mid;}
++l;if(l>=)printf("%d\n",l);else printf("%d\n",);
return ;
}

这儿是代码!

洛谷P2743 乐曲主题Musical Themes [USACO5.1] SA的更多相关文章

  1. Luogu P2743 [USACO5.1]乐曲主题Musical Themes

    链接 \(Click\) \(Here\) 人生第一道后缀数组的题目.首先要对输入的串进行差分处理,差分后长度为(\(n - 1\))的相同子段就是原串中长度为\(n\)的相同(可变调)子段.求出来\ ...

  2. [USACO5.1] 乐曲主题Musical Themes

    题目链接:戳我 Emmm......hash怎么做啊不会啊 这里是SA后缀数组版本的 就是先两两做差分,作为要处理后缀的数组.普通地求出来h数组之后,我们二分这个答案,然后判定是否合法就行了.是否合法 ...

  3. 乐曲主题Musical Themes

    SA例题 题面 对于串 \(S\) 的两个子串 \(A\) 和 \(B\) ,满足 \(k = |A| = |B|\),\(\exists c \forall i\, a_i + c=b_i\),且 ...

  4. 【洛谷2744 】【CJOJ1804】[USACO5.3]量取牛奶Milk Measuring

    题面 Description 农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位--译者注) 他的最好的牛奶,并把它装入一个大瓶子中卖出.消费者要多少 ...

  5. 洛谷P2747周游加拿大Canada Tour [USACO5.4] dp

    正解:dp 解题报告: 传送门! 其实这题是我做网络流的时候发现了这题,感觉有点像双倍经验,,,? 但是我还不想写网络流的题解,,,因为网络流24题都还麻油做完,,,想着全做完了再写个总的题解什么的( ...

  6. 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)

    题目链接:https://www.luogu.org/problem/P2463 [题意] 求出N个串中都出现的相同子串的最长长度,相同子串的定义如题:所有元素加上一个数变成另一个,则这两个串相同,可 ...

  7. P2743(poj1743) Musical Themes[差分+后缀数组]

    P2743 乐曲主题Musical Themes(poj1743) 然后呢这题思路其实还是蛮简单的,只是细节特别多比较恶心,忘记了差分带来的若干疏漏.因为转调的话要保证找到相同主题,只要保证一段内相对 ...

  8. [USACO5.1] Musical Themes

    后缀数组求最长重复且不重叠子串. poj 1743 传送门 洛谷 P2743 传送门 1.子串可以“变调”(即1 3 6和3 5 8视作相同).解决办法:求字符串相邻元素的差形成新串.用新字符串求解最 ...

  9. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码

    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication[最小割]分析+题解代码 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流. ...

随机推荐

  1. Python中的__name__和类

    1.   python中if __name__ == '__main__': 的解析 经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是 ...

  2. Git秘钥生成以及Gitlab配置(附以下问题解决方法:Key is invalid Fingerprint cannot be generated)

    在进行Git密钥配置时,总是提示: “The form contains the following errors:Key is invalidFingerprint cannot be genera ...

  3. Docker容器启动lnmp环境下的mysql服务时报"MySQL server PID file could not be found"错误解决办法

    我在自己的mac笔记本上装了一个docker,并在docker容器中安装了lnmp环境,经常会遇到在使用"lnmp restart"命令启动lnmp服务的时候,mysql服务启动失 ...

  4. 值得从PHP转向JavaScript

    1.掌握一门语言而成为爆栈工程师确实诱惑力极大 2.JavaScript 代码的语义性比 PHP 更强一些,当然语言整体特性也复杂不少,学习成本是更高的 3.JSON原生:配合MongoDB的话,从头 ...

  5. Oracle分析函数-nulls first/nulls last

    select * from criss_sales; 通过rank().dense_rank().row_number()对记录进行全排列.分组排列取值但有时候,会遇到空值的情况,空值会影响得到的结果 ...

  6. linux通用技巧集合

    1.将程序置为后台进程运行,关闭终端程序继续运行 nohup ./test.sh & 2.列出当前后台运行的进程列表包括进程id jobs -l 3.根据进程id杀掉该进程 kill - pi ...

  7. Elasticsearch index fields 重命名

    reindex数据复制,重索引 POST _reindex { "source": { "index": "twitter" }, &quo ...

  8. 01Spark的TopN问题

    和hadoop的目的一样,给你数据,然后取TopN.数据如下: 取出数据在排名前十的数据. 代码如下: package com.test.book; import java.util.ArrayLis ...

  9. nginx通过反向代理实现未备案域名访问详解

    本方法实现前提是8123端口(也可以是其他端口)面对互联网打开.server里面监听80端口,然后反向代理8123端口.1.其中server_name部分是我的域名可以替换成其他想要的域名2.8123 ...

  10. 24访问者模式Visitor

    一.什么是访问者模式 Visitor模式也叫访问者模式,是行为模式之一 ,它分离对象的数据和行为,使用Visitor模式, 可以不修改已有类的情况下,增加新的操作. 二.访问者模式的应用示例 比如有一 ...