9月——都已经9月了还不好好刷题?。。

UVALive4513 (字符串hash

题目:在一个串中找到至少出现m次的最长的串。

思路:直接hash,然后二分答案。

/*
* @author:  Cwind
* http://www.cnblogs.com/Cw-trip/
*/
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <map>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <queue>
#include <stack>
#include <functional>
#include <set>
#include <cmath>
using namespace std;
#define IOS std::ios::sync_with_stdio(false);std::cin.tie(0)
#define pb push_back
#define PB pop_back
#define bk back()
#define fs first
#define se second
#define sq(x) (x)*(x)
#define eps 0.00000001
#define IINF (1<<29)
#define LINF (1ll<<59)
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> P;

const int maxl=4e4+300;
const ull hash1=123;
int m;
char s[maxl];
ull H[maxl];
ull xp[maxl];
ull gethash(int i,int L){
    return H[i]-H[i+L]*xp[L];
}
int len;
map<ull,vector<int> > mp;
map<ull,int> cont;
map<ull,vector<int> >::iterator it;
ull val[maxl];
bool check(int l){
    for(int i=0;i<len-l+1;i++){
        val[i]=gethash(i,l);
    }
    sort(val,val+len-l+1);
    int c=0;
    for(int i=0;i<len-l+1;i++){
        if(i==0||val[i]!=val[i-1]) c=1;
        if(val[i]==val[i-1]) c++;
        if(c>=m) return true;
    }
    return false;
}
void getans(int l){
    mp.clear();
    for(int i=0;i+l<=len;i++){
        mp[gethash(i,l)].pb(i);
    }
}
void init(){
    xp[0]=1;
    for(int i=1;i<maxl;i++){
        xp[i]=xp[i-1]*hash1;
    }
}
int main(){
    freopen("/home/files/CppFiles/in","r",stdin);
    init();
    while(cin>>m,m){
        scanf("%s",s);
        len=strlen(s);
        H[len]=0;
        for(int i=len-1;i>=0;i--){
            H[i]=H[i+1]*hash1+(ull)s[i];
        }
        int l=0,r=len+1;
        while(r-l>1){
            int mid=(r+l)/2;
            if(check(mid)){
                l=mid;
            }else{
                r=mid;
            }
        }
        if(l==0){
            puts("none");
            continue;
        }
        getans(l);
        vector<int> pos;
        for(it=mp.begin();it!=mp.end();it++){
            if(it->se.size()>=m){
                sort(it->se.begin(),it->se.end());
                pos.pb(it->se.bk);
            }
        }
        sort(pos.begin(),pos.end());
        printf("%d %d\n",l,pos.bk);
    }
    return 0;
}

时间: 2024-10-19 06:53:38

9月——都已经9月了还不好好刷题?。。的相关文章

【System Log】7月14日—7月29日

本日志由系统自动生成. 从7月14日起便按照心想事成的节奏进入了实验室.打酱油.周末又去学活值班,生活的框架还是很不错的. 1.基于Hadoop的Flume,zooKeeper,这些东西算是明白了个大概. 2.第一周大概学习了javascript.jquery.css.ci框架(php)这些基本的东西,然后大概搭了个大创网站的架子出来. 3.第二周周末开始写android,答应别人要开发的一个小游戏,但是写着写着就觉得压力大写不出来. 4.中间还抽时间看了程杰的大话设计模式,和一些人ctf的wr

你连自律都做不到,还奢谈什么自由?

本文由作者 菜刀少爷 授权罗辑思维发布,选自微信公众号“菜刀少爷”. 1 牛人都是狠角色 据说史蒂夫·乔布斯年轻时每天凌晨四点起床,九点前把一天工作做完.乔帮主说:自由从何而来?从自信来,而自信则是从自律来. 自律是对自我的控制,自信是对事情的控制.先学会克制自己,用严格的日程表控制生活,才能在这种自律中不断磨练出自信. 都是成年人,连最基本的行为控制都做不到,还谈什么自信?又奢谈什么自由? 前华人首富李嘉诚以勤奋自律著称.他的作息时间非常有名: 不论几点睡觉,在清晨5点59分闹铃响后起床:随后

巨石财富代理是真的吗:月入上万与月赚几千的差距在哪?

巨石财富代理是真的吗:月入上万与月赚几千的差距在哪? 现如今,"全民理财"的热潮不断上涨,互联网金融作为一种简单便捷的新型投资理财方式,受到了很多投资者的喜爱,而互联网金融代理门槛低.佣金高的特点也吸引了很多自由职业或创业者加入了这个行业,这些代理中,有的人能轻轻松松月入过万,而有的人则辛辛苦苦才能赚几千来块,而造成这种差距的原因是什么呢?下面我们将做个详细分析. 代理是否找对市场 由于互联网金融投资不需要投资者具有很多的金融知识,加上其具有低成本.交易周期短的特点,比较适合大学生.都

【灯谜天地群】2017年3月18日谜途羔羊主擂谜会题

[灯谜天地群]2017年3月18日谜途羔羊主擂谜会题 1.无聊的时候,一人低着头(9笔字)耷2.吃尽苦头始享福(9笔字)祜3.楼道旁边花始开(2字新称谓)迷妹4.人生有曲折,一定别失落(9笔字)草5.皮衣交易方停止(2字幼儿行为)踢被6.对着妻子抛媚眼(3字商品类别,卷)小家电7.朋友走后心难受,终觉缘分都到头(4字物品分配语)见者有份8.此女终了解,孕后别心哀(婴儿用品)奶嘴9.错过只缘未开口,半生仍把她牵挂(2字称谓)奶爸10.探望失业已久者(5字女生情感描述语)看不上班长11.一潭清水日西

【谜情文化宫群】2017年3月18日淘沙浪主擂谜会题

[谜情文化宫群]2017年3月18日淘沙浪主擂谜会题 1.大庆出油不掺水(8笔字)庙2.不知后来谁发言(13笔字)雉3.一时失察斩蔡瑁(成语)操之过急4.领导就该被忽悠(4字口语)上当受骗5.淘沙浪同意先讲棋(8笔字)泣6.坐下够不着(2字词 徐妃)垃圾7.只给弟妹发红包(5字口语)老大不高兴8.真心见面她也不来(9笔字)耍9.地球村(五唐一句)天涯若比邻10.迷路(3字口语)不知道11.鲁迅已及期颐(成语)百年树人12.以谜会友(5字口语)不打不相识13.越大越丑了(视目)少帅14.高尔基首先

【红雪莲谜缘阁群】2017年3月25日坚强与微笑主擂谜会题

[红雪莲谜缘阁群]2017年3月25日坚强与微笑主擂谜会题 01.老农清晨就起身(常用字)川02.宴终人散正初更(常用字)妹03.务必尽力分高下(常用字)处04.顺川而下到江东(常用字)项05.调解之后释前嫌(常用字)谦06.阵前先要能追逐(常用字)隧07.东邻老头去晋北(常用字)都08.整改工厂能崛起(常用字)岸09.人一高兴人变样(常用字)俭10.来日时光去不还(常用字)过11.外逃二人是重点(常用字)送12.一心牵挂心上人(常用字)态13.干了啥事放不下(常用字)哈14.北方去寻人相认(常

2014年11月2日-11月9日 周总结

不敢相信一周的时间就这样过去了,只是简单的做了一个梦.醒来又是就是下周了. 周一周二所有的时间都是在准备地球制图的项目,周三编制制图报告.周四周五又都是在复习,准备地学信息分析与处理考试,一直都没有读书.一直到了周五晚上才有空读书.ArcGIS产品的白皮书,ENVI的产品白皮书和EV-Globe产品白皮书,粗略的浏览了一遍.又浏览了一下Matlab的帮助程序,收获很大,不过还是为了考试.值得高兴的是,计算机制图不需要考试,只需要交作品就好. 2014年11月10日-11月16日需要的事,AE二次

3月12日-3月13日百度有了大幅更新,不幸排名下降了很多

昨日百度有了大幅更新.不幸的是站的排名有了很大的下滑. 关键词是配资 股票配资.域名:www.ya-jing.cn 配资公司还好. 总结一下: 1.公司站的内容长久没有更新了.对于配资这种知识类属性的词指定下滑. 2. 百度更加注重体验了,排名上去的新站更侧重实用性和简洁性,不是所谓的内容堆积. 3. 工作精力或者重点应该放在用户体验上了.这是核心了. www.dlnulib.com 周公解梦 这个站的收录也正常了,上次被人攻击导致了很多垃圾的内容.现在回归正常了,但是很多其他的正常内容也中枪了

9月13日-9月15日课程作业(练习)

9月13日-9月15日课程作业(练习)   5.写一个脚本:如果某路径不存在,则将其创建为目录:否则显示其存在,并显示内容类型:(不要怀疑,就是这么简单) 1 #!/bin/bash2 #3 #4 if [ $# -ne 1 ];then5 echo "please input one parameter"6 exit 37 fi8 9 if [ -e $1 ];then10 echo $(file $1)11 else12 mkdir -p $113 echo "make