UVA12206 Stammering Aliens
思路
可以二分答案+哈希
判断有没有那个长为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的更多相关文章
- Uva12206 Stammering Aliens 后缀数组&&Hash
Dr. Ellie Arroway has established contact with an extraterrestrial civilization. However, all effort ...
- UVA12206 Stammering Aliens 【SAM 或 二分 + hash】
题意 求一个串中出现至少m次的子串的最大长度,对于最大长度,求出最大的左端点 题解 本来想练哈希的,没忍住就写了一个SAM SAM拿来做就很裸了 只要检查每个节点的right集合大小是否不小于m,然后 ...
- UVA 12206 - Stammering Aliens(后缀数组)
UVA 12206 - Stammering Aliens 题目链接 题意:给定一个序列,求出出现次数大于m,长度最长的子串的最大下标 思路:后缀数组.搞出height数组后,利用二分去查找就可以 这 ...
- Stammering Aliens
Stammering Aliens Time Limit: 2000MS Memory Limit: 65536K Description Dr. Ellie Arroway has ...
- 题解 UVA12206 【Stammering Aliens】
终于A了这道题啊(坑啊) 教练说:这道题不能用map吧,复杂度不一个O(nlogn)吗 于是我就一直想不出来,然后看题解代码,一看就是map... 所以我就在想,那复杂度是不是也不是O(nlogn)呢 ...
- HDU4080 Stammering Aliens(二分 + 后缀数组)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4080 Description Dr. Ellie Arroway has establish ...
- UVALive - 4513 Stammering Aliens ——(hash+二分 || 后缀数组加二分)
题意:找一个出现了m次的最长子串,以及这时的最右的位置. hash的话代码还是比较好写的,,但是时间比SA多很多.. #include <stdio.h> #include <alg ...
- Hash(LCP) || 后缀数组 LA 4513 Stammering Aliens
题目传送门 题意:训练指南P225 分析:二分寻找长度,用hash值来比较长度为L的字串是否相等. #include <bits/stdc++.h> using namespace std ...
- UVa 12206 (字符串哈希) Stammering Aliens
体验了一把字符串Hash的做法,感觉Hash这种人品算法好神奇. 也许这道题的正解是后缀数组,但Hash做法的优势就是编码复杂度大大降低. #include <cstdio> #inclu ...
随机推荐
- IP,IP地址,mac地址
IP地址与IP是两个不同的概念.单独讲IP,是指IP协议 IP地址分为三类:单播地址(目的为单个主机):多播地址(目的端为同一组的所有主机):广播地址(目的端为网络上所有给定的主机) ip地址由网络和 ...
- WangEditor+thinkphp5【真实可用+原创】
今天公司要编辑文章,一开始准备用ueditor,但是到了linux环境下一直不行,所以最终放弃.改用另外一个编辑器WangEditor.更加轻量级. 遇到最大的问题是 一个是图片上传,一个是div中的 ...
- 【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 ...
- stm32定时器输出移相PWM(非主从模式)
背景:由于项目需要,需要stm32输出任意相角度的PWM 前提知识: 1.stm32定时器的Tim,一般有多个OC.具体差别根据型号来定. 2.定时器的使能,理论上是多个通道同时使能 3.TIM_OC ...
- 工具方法: jQuery.方法() $.extend (小计)
$.extend(布尔值,目标对象,合并对象,……) 布尔值 : true,深拷贝(递归拷贝) false,浅拷贝(非递归拷贝) ...
- Objective-C RunTime 学习笔记 之 atomic/nonatomic 关键字
atomic修饰的是变量/方法,对于可变对象的指针变量是安全的,内部实现加了锁,但是对可变对象本身没什么影响,不安全还是不安全.另外atomic仅仅对编译器生产的getter.setter有效,如果自 ...
- ansible批量管理
编写批量安装脚本 [root@m01 scripts]# vim install.sh for ip in $* do echo "=======start install to $ip = ...
- Java获取项目根目录等其他系统属性
一 相对路径的获得 说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目) String relativelyPath=System.getProper ...
- 文本框defalutValue的使用
以下页面中的文本框的值无论怎么改变,点击“原始值”按钮始终会得到初始页面的时候的值,即“ffffffffffffff” <!DOCTYPE html> <html> <h ...
- java个内部类的总结
内部类的概念 成员内部类 访问成员内部类格式: 案例 局部内部类 案例 静态内部类 访问格式: 案例 匿名内部类 格式: 案例 内部类的概念 将类定义在类的内部,那么该类就成为内部类 注意: 内部类是 ...