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 ...
随机推荐
- .Net Core知识点
1:const,readonly,和get访问器,三者都可在自己的生命域里赋值,但是编译器也是可以在构造函数里进行初始化赋值的 2:Debugger.IsAttached 属性 http://msdn ...
- 【Idea】Intellij Idea debug 模式如果发现异常,即添加异常断点在发生异常处
前用eclipse的时候,可以根据所抛出的异常进行调试,比如:出现了空指针异常,我想知道是哪一行抛出的,在eclipse中我只需在debug模式下把空指针异常这个名字设置进去,当遇到空指针异常时,ec ...
- [LintCode] 77. Longest common subsequences_ Medium tag: Dynamic Programming
Given two strings, find the longest common subsequence (LCS). Example Example 1: Input: "ABCD&q ...
- 20175211 2018-2019-2 《Java程序设计》第六周学习总结
目录 教材学习内容总结 第七章 内部类与异常类 第十章 输入.输出流 教材学习中的问题和解决过程 代码托管 学习进度条 参考资料 教材学习内容总结 第七章 内部类与异常类 第十章 输入.输出流 教材学 ...
- 安卓微信端打开H5页面背景图被键盘挤压移动位置解决
问题:在微信端(安卓浏览器也如此)打开的H5登录页面中,点击输入信息,弹出软键盘会挤压背景图片. 本来的body宽高设置body{width:100%,height:100%},不起作用,这样写就会导 ...
- egg.js异步请求数据
之前已经简单的使用egg-init初始化项目,并创建控制器controller和服务service 在实际项目中, service主要负责数据的请求,并处理(http请求) controll主要负责获 ...
- beego 初体验 - 上传文件
页面: controller: 将form表单文件上传到本地,并保存.
- mongodb细讲
一. 关系型数据库(sql) 1.建表 二.非关系型数据库(nosql 98提出的概念) 1.不用建库建表数据直接存入就可 优缺点: 关系型:节约资源(学生姓名和课程名不重复出现),开发不方便(需先 ...
- empty和isset区别
isset判断变量是否已存在(配置) unset把变量删除(释放)掉 empty 判断变量是否为空 is_null 判断变量是否为NULL is_null,我们可以把它看成是!isset,是isset ...
- react知识总结
用于构建用户界面的 JavaScript 库 JSX语法 style let style = { color: 'r'+'ed', fontSize: '30px' } let jsx = <d ...