思路

可以二分答案+哈希

判断有没有那个长为L的串出现至少m次即可

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
int n,m;
const int base = 131;
unsigned long long hashx[80000],power[80000];
int ans=0,lastans=0;
char s[80000];
void init(){
memset(hashx,0,sizeof(hashx));
memset(power,0,sizeof(power));
ans=0;
lastans=0;
}
void get_hash(void){
power[0]=1;
for(int i=1;i<=n;i++){
hashx[i]=hashx[i-1]*base+s[i];
power[i]=power[i-1]*base;
}
}
unsigned long long hashs(int l,int r){
return hashx[r]-hashx[l-1]*power[r-l+1];
}
struct MapNode{
int times,pos;
bool operator < (const MapNode &b) const{
return b.times<times;
}
};
map<unsigned long long,MapNode> M;
bool check(int x){
M.clear();
ans=0;
for(int i=1;i+x-1<=n;i++){
M[hashs(i,i+x-1)].times++;
M[hashs(i,i+x-1)].pos=i;
}
bool f=false;
for(auto it = M.begin();it!=M.end();it++){
if((*it).second.times>=m){
f=true;
ans=max(ans,(*it).second.pos);
}
}
return f;
}
int main(){
// freopen("test.in","r",stdin);
// freopen("test.out","w",stdout);
while(scanf("%d",&m)==1&&m){
init();
scanf("%s",s+1);
n=strlen(s+1);
get_hash();
int l=0,r=n,t=0;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid))
lastans=ans,t=mid,l=mid+1;
else
r=mid-1;
}
if(t){
printf("%d %d\n",t,lastans-1);
}
else{
printf("none\n");
}
}
return 0;
}

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. UVA 12206 - Stammering Aliens(后缀数组)

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

  4. Stammering Aliens

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

  5. 题解 UVA12206 【Stammering Aliens】

    终于A了这道题啊(坑啊) 教练说:这道题不能用map吧,复杂度不一个O(nlogn)吗 于是我就一直想不出来,然后看题解代码,一看就是map... 所以我就在想,那复杂度是不是也不是O(nlogn)呢 ...

  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. IP,IP地址,mac地址

    IP地址与IP是两个不同的概念.单独讲IP,是指IP协议 IP地址分为三类:单播地址(目的为单个主机):多播地址(目的端为同一组的所有主机):广播地址(目的端为网络上所有给定的主机) ip地址由网络和 ...

  2. WangEditor+thinkphp5【真实可用+原创】

    今天公司要编辑文章,一开始准备用ueditor,但是到了linux环境下一直不行,所以最终放弃.改用另外一个编辑器WangEditor.更加轻量级. 遇到最大的问题是 一个是图片上传,一个是div中的 ...

  3. 【Nginx】-NO.141.Nginx.1 -【Nginx】

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  4. stm32定时器输出移相PWM(非主从模式)

    背景:由于项目需要,需要stm32输出任意相角度的PWM 前提知识: 1.stm32定时器的Tim,一般有多个OC.具体差别根据型号来定. 2.定时器的使能,理论上是多个通道同时使能 3.TIM_OC ...

  5. 工具方法: jQuery.方法() $.extend (小计)

    $.extend(布尔值,目标对象,合并对象,……)                布尔值 : true,深拷贝(递归拷贝)   false,浅拷贝(非递归拷贝)                   ...

  6. Objective-C RunTime 学习笔记 之 atomic/nonatomic 关键字

    atomic修饰的是变量/方法,对于可变对象的指针变量是安全的,内部实现加了锁,但是对可变对象本身没什么影响,不安全还是不安全.另外atomic仅仅对编译器生产的getter.setter有效,如果自 ...

  7. ansible批量管理

    编写批量安装脚本 [root@m01 scripts]# vim install.sh for ip in $* do echo "=======start install to $ip = ...

  8. Java获取项目根目录等其他系统属性

    一 相对路径的获得 说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目) String relativelyPath=System.getProper ...

  9. 文本框defalutValue的使用

    以下页面中的文本框的值无论怎么改变,点击“原始值”按钮始终会得到初始页面的时候的值,即“ffffffffffffff” <!DOCTYPE html> <html> <h ...

  10. java个内部类的总结

    内部类的概念 成员内部类 访问成员内部类格式: 案例 局部内部类 案例 静态内部类 访问格式: 案例 匿名内部类 格式: 案例 内部类的概念 将类定义在类的内部,那么该类就成为内部类 注意: 内部类是 ...