终于A了这道题啊(坑啊)

教练说:这道题不能用map吧,复杂度不一个O(nlogn)吗

于是我就一直想不出来,然后看题解代码,一看就是map...

所以我就在想,那复杂度是不是也不是O(nlogn)呢

教练看了半天,说:好像确实不是诶

原来阻挡我的最大障碍是教练啊!!!(当时只给题面,也不知道时限)


看到这道题题面,找最长,位置又是有序的,肯定就能想到二分(然而我脑抽,想了几分钟才想到)

然后check里怎么写呢,这是最大的问题

能不能直接判断两者相不相等呢,我们可以使用字符串哈希!!!(这就不要讲了吧)

但是位置一个个枚举吗(时间空间双爆炸!!!)?

我们只能选择更优的办法,要是能把值相等的放在一起,符合的选最大位置就好了。

我想了很久,一开始使用map(被老师坑了),后面突然想到一个好东西,sort!!!(然而又被老师坑了)

sort可以将几个值相等的放一起,但却不知道初始位置,不过这个一下就解决了,可以再用个数组记录嘛

于是就写了下来,然后惊奇地发现,过了!!!

代码如下(有几个坑点):

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,wz;
char s[];
unsigned long long p[],sum[];
inline int max(int a,int b){
return a>b?a:b;
}
struct ab{//结构体,a记值,b记位置
unsigned long long a;
int b;
}t[];
inline bool cmp(ab x,ab y){//快排,值相等位置大的放后面
return x.a<y.a||(x.a==y.a&&x.b<y.b);
}
inline bool check(int x){
wz=;
for(int i=;i<=n-x+;i++)
t[i].a=sum[i+x-]-sum[i-]*p[x],t[i].b=i;
sort(t+,t++n-x,cmp);
int j=;//j开始要置1,因为开始就是一个
for(int i=;i<=n-x+;i++){
if(t[i].a==t[i-].a)j++;//相等加1
else j=;
if(j>=m)wz=max(wz,t[i].b);//可以就选大
}
if(wz)return true;
return false;
}
int main(){
p[]=;
for(int i=;i<=;i++)p[i]=p[i-]*;
scanf("%d",&m);
while(m){
int ans1=,ans2=;
scanf("\n%s",s+);
n=strlen(s+);
for(int i=;i<=n;i++)sum[i]=sum[i-]*+s[i];//字符串哈希
int l=,r=n;
int ss=;
while(l<=r){//用l<=r,预防l==r的时候有解却没记录
int mid=(l+r+)/;
if(check(mid))ans1=mid,l=mid+,ss++,ans2=wz-;
else r=mid-;
}
if(!ss)printf("none\n");//没有找到符合的解
else printf("%d %d\n",ans1,ans2);
scanf("%d",&m);
}
return ;
}

题解 UVA12206 【Stammering Aliens】的更多相关文章

  1. Uva12206 Stammering Aliens 后缀数组&&Hash

    Dr. Ellie Arroway has established contact with an extraterrestrial civilization. However, all effort ...

  2. UVA12206 Stammering Aliens 【SAM 或 二分 + hash】

    题意 求一个串中出现至少m次的子串的最大长度,对于最大长度,求出最大的左端点 题解 本来想练哈希的,没忍住就写了一个SAM SAM拿来做就很裸了 只要检查每个节点的right集合大小是否不小于m,然后 ...

  3. UVA12206 Stammering Aliens

    思路 可以二分答案+哈希 判断有没有那个长为L的串出现至少m次即可 代码 #include <cstdio> #include <cstring> #include <a ...

  4. UVA 12206 - Stammering Aliens(后缀数组)

    UVA 12206 - Stammering Aliens 题目链接 题意:给定一个序列,求出出现次数大于m,长度最长的子串的最大下标 思路:后缀数组.搞出height数组后,利用二分去查找就可以 这 ...

  5. Stammering Aliens

    Stammering Aliens Time Limit: 2000MS   Memory Limit: 65536K       Description Dr. Ellie Arroway has ...

  6. HDU4080 Stammering Aliens(二分 + 后缀数组)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4080 Description Dr. Ellie Arroway has establish ...

  7. UVALive - 4513 Stammering Aliens ——(hash+二分 || 后缀数组加二分)

    题意:找一个出现了m次的最长子串,以及这时的最右的位置. hash的话代码还是比较好写的,,但是时间比SA多很多.. #include <stdio.h> #include <alg ...

  8. Hash(LCP) || 后缀数组 LA 4513 Stammering Aliens

    题目传送门 题意:训练指南P225 分析:二分寻找长度,用hash值来比较长度为L的字串是否相等. #include <bits/stdc++.h> using namespace std ...

  9. UVa 12206 (字符串哈希) Stammering Aliens

    体验了一把字符串Hash的做法,感觉Hash这种人品算法好神奇. 也许这道题的正解是后缀数组,但Hash做法的优势就是编码复杂度大大降低. #include <cstdio> #inclu ...

随机推荐

  1. GitHub报错error: bad signature

    Git报错 bad signature 将文件提交到仓库时,抛出以下错误: 报错 Roc@DESKTOP-AF552U2 MINGW64 /e/note/Git (master) $ git add ...

  2. linux下为firfox安装flash player

    1.去官网下载×.tar.gz包,如:flash_player_npapi_linux.x86_64.tar.gz 2.解压 tar -zxvf flash_player_npapi_linux.x8 ...

  3. VUE:过滤器及日期格式化moment库

    VUE:过滤器及日期格式化moment库 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  4. UVA 12507 Kingdoms

    D - Kingdoms Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu A kingdom ha ...

  5. ASP.NET-HTTP响应标头

    Reponse Headers 理论上所有的响应头信息都应该是回应请求头的.但是服务端为了效率,安全,还有其他方面的考虑,会添加相对应的响应头信息,从上图可以看到: Cache-Control:mus ...

  6. WinServer-IIS初始安装及发布网站

    \aspnet_regiis.exe –i 还有非常重要的一步就是给发布文件夹设置权限,到底设置那一个用户的权限我也没有弄清楚,大概是IIS_IUSERS或者IUSR用户就可以了,我设置完了之后没有反 ...

  7. vue2 router中的 @ 符号表示src

    vue2 router中的 @ 符号表示src 学习了:https://segmentfault.com/q/1010000009549802 这个是webpack起的别名: 在build/webpa ...

  8. HDU 4175 Class Schedule (暴力+一点dp)

    pid=4175">HDU 4175 题意:有C座楼,每座楼有T个教室.一个人须要訪问C个教室.每座楼仅仅能訪问一个教室. 訪问教室须要消耗能量,从x点走到y点须要消耗abs(x-y) ...

  9. Python 获取Google+特定用户最新动态

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-28 @author: guaguastd @name: l ...

  10. 号外:Spark 1.3.0公布了,快来一起飞!

    Spark 1.3.0 Release Note Spark 1.3.0在上周五正式公布.真是千呼万唤始出来.本次公布最大的惊喜就是DataFrame.另外一个值得关注的是Spark SQL从Alph ...