P3538-[POI2012]OKR-A Horrible Poem【hash,字符串】

正题

评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P3538


题目大意

给一个字符串,有q个询问,询问一个区间最短循环节。


解题思路

首先最短循环节长度一定长度的约数,所以我们可以枚举约数,然后判断循环节的话只需要(l,rt)(l,r−t)(l+t,r)(l+t,r)这段区间相等就好了,所以我们可以用hash表来O(1)O(1)来判断循环节。
时间复杂度:O(qn)O(qn)
然后在约数的地方我们用素数筛来做,将nn的复杂度降低为了log nlogn
最终时间复杂度:O(q  log n)O(qlogn)


code

#include<cstdio>
#define ull unsigned long long
using namespace std;
const int wer=13131,N=500005;
ull mul[N],hash[N];
bool use[N];
int next[N],prim[N/10],ys[N/10],n,m,l,r,k,tot;
char s[N];
void prime()//素数筛优化约数
{for(int i=2;i<=n;i++){if(!use[i]){prim[++k]=i;next[i]=i;}for(int j=1;j<=k&&(long long)prim[j]*i<=n;j++){next[prim[j]*i]=prim[j];use[prim[j]*i]=true;if(i%prim[j]==0){break;}}}
}
bool check(int l1,int r1,int l2,int r2)
{return hash[r1]-hash[l1-1]*mul[r1-l1+1]==hash[r2]-hash[l2-1]*mul[r2-l2+1];
}
int main()
{scanf("%d\n%s",&n,&s);mul[0]=1;for(int i=1;i<=n;i++){mul[i]=mul[i-1]*wer;hash[i]=hash[i-1]*wer+s[i-1]-'a'+1;}//哈希prime();scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d%d",&l,&r);int len=r-l+1;tot=0;while(len!=1){ys[++tot]=next[len];//记录素数len/=next[len];}len=r-l+1;for(int j=1;j<=tot;j++)//枚举约数{int t=len/ys[j];if(check(l,r-t,l+t,r)){len=t;}//判断}printf("%d\n",len);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译原理(三)之语义分析

采用实验1的简单语言&#xff0c;设计并实现含多条简单赋值语句的语法语义分析程序&#xff0c;要求采用递归下降翻译法。 注意与实验1、2的衔接。 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.T…

活动: 北京Xamarin分享会第6期(2017年9月9日)

每月第二个周六&#xff0c;北京丹棱街5号微软大厦&#xff0c;有什么活动&#xff1f;对, BXUG线下分享活动又来啦! 本次分享嘉宾阵容庞大&#xff0c;在金秋凉爽的季节&#xff0c;期待与大家面对面的交流。内容预告&#xff1a; 案例分享&#xff1a;某大型国企IT项目如何采…

捡到东西说给钱才给东西?算不算敲诈勒索……

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”前言前两天&#xff0c;将一个那天急要但是后来就不重要的东西&#xff0c;放在车筐里面&#xff0c;结果到目的地一看&#xff0c;没了……椅子还没坐热&#xff0c;有人打来电话了“你…

编译原理(四)之解析语言翻译成三地址代码

选择部分C语言的语法成分&#xff0c;设计其词法语法语义分析程序。 设计并实现一个一遍扫描的词法语法语义分析程序&#xff0c;将部分C语言的语法成分翻译成三地址代码&#xff0c;要求有一定的出错提示和错误恢复功能。 例如简单赋值语句&#xff1a; area3.14*a*a; s 2*…

POJ3784-Running Median(运行中位数)【链表】

正题 题目链接&#xff1a;http://poj.org/problem?id3784 题目大意 给出n个数&#xff0c;每两个数输出一次到目前为止输入了的所有数的中位数。 解题思路 我们使用离线算法。 既然这是一个一个输入&#xff0c;那么我们就用秘技时光倒流之数。先把所有数加入进去&#x…

[北京微软技术直通车]前端 Visual Studio Code 开发 Angular 与亿级 SQL Servern

微软技术直通车第一期将于2017年9月9日与大家见面&#xff0c;本次邀请华北区微软技术专家和大家一起交流前端工具与技术&#xff0c; Visual Studio Code&#xff0c;TypeScript 与 Anuglar 项目开发和亿级数据库运维的最佳实践&#xff0c;分享相关技术的发展前景和从业经验&…

vue中如何实现全全全屏和退出全屏?

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”最近总有人给我说ta有社恐&#xff0c;明明是有社牛好不好……前言在做大屏界面的时候&#xff0c;客户有个要求&#xff0c;一进去登录成功之后&#xff0c;要有全屏的功能&#xff0c;…

Spring MVC请求url无效问题思考

一、Controller没有配置 page not found or method not supported. 没有扫描到包里面的controller类 <context:component-scan base-package"com.mk.controller" /> 二、请求方式GET/POST org.springframework.web.servlet.PageNotFound noHandlerFound No…

P1160-队列安排【链表】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1160 题目大意 有nn个人,编号是1&#x223C;n" role="presentation">1∼n1∼n&#xff0c;然后开始时插入第一个人&#xff0c;之后每次可以插入到一个人的左边或右边&#xff0…

【深圳】掌通宝科技有限公司技术总监(兼架构师),约吗

技术总监&#xff08;兼架构师&#xff09; 岗位职责&#xff1a; 1、主持研发中心日常管理工作&#xff0c;负责公司O2O平台,SaaS平台管理&#xff1b; 2、负责公司.net后台&#xff0c;Android客户端、IOS客户端、WEB平台等架构设计&#xff1b; 4、解决开发中的技术问题…

树层级处理上万条数据优化!

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”前言项目中&#xff0c;部门数超万&#xff0c;导致页面加载价卡顿怎么办&#xff1f;使用若依自带解析树的方法在本地运行没有任何问题&#xff0c;但是一发布到服务器上就显示加载超…

Idea Tomcat启动报异常CannotLoadBeanClassException

一、现象展现 Idea配置占用了C磁盘的所有空间&#xff0c;删除Idea配置目录后&#xff0c;改为D磁盘存储Idea配置。 由于idea的Artifact&#xff08;war explode包&#xff09;在没有整个项目重新构建情况下没有执行热发布&#xff0c;从而删除Artifact的war和war explode包&…

P3435-[POI2006]OKR-Periods of Words【KMP】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP3435 大意 一个字符串&#xff0c;对于每个前缀&#xff0c;求复制一份放在末尾可以覆盖整个前缀的前缀&#xff0c;求所有的长度和。 解题思路 这道题如果暴力的话很简单&#xff0c;对于每个前缀每…

Orleans解决并发之痛(三):集群

Orleans本身的设计是一个分布式的框架&#xff0c;多个Silo构成集群&#xff0c;Grains分布在多个Silo中。一旦一个Silo挂了&#xff0c;原来归属这个Silo的Grains会自动在其他Silo中激活。生产环境下还是需要以集群方式来部署。 cluster 在Orleans解决并发之痛&#xff08;二…

avue中实现消息的实时展示

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”前言一个功能写了大半天&#xff0c;主要是数据表设计的有点复杂&#xff0c;且这个项目是10月份就写的放那的&#xff0c;里面有些东西都忘记了……先看数据库结构&#xff0c;然后理…

org.apache.ibatis.builder.BuilderException: Could not find value method on SQL annotation

转载自 mybatis 注解引发的bug&#xff0c;org.apache.ibatis.builder.BuilderException: Could not find value method on SQL anno Mybatis用注解开发且还用script标签 这种bug&#xff0c;网上一搜一大堆&#xff0c;但是都xml方式开发&#xff0c;大部分说的是返回类型或…

P2375-[NOI2014]动物园【KMP,字符串】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP2375 题目大意 对于kmp操作&#xff0c;我们多求一个numnum数组&#xff0c;表示对于字符串SS的前i" role="presentation">ii个字符构成的子串&#xff0c;既是它的后缀同时又是它…

发达国家与发展中国家编程语言技术的分布差异性

近日&#xff0c;Stack Overflow在官方博客上发布了一组统计数据&#xff0c;表明发达国家与发展中国家在编程语言技术的采用上存在较大的差异。Stack Overflow对2017年1月至8月期间的访问数据进行了分析&#xff0c;选取了64个技术标签&#xff0c;每个标签所包含问题的访问次…

两个map中的数据,按照相同键,将所对应的值相加方法

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”前言最近写代码的时候遇到了个需求&#xff0c;刚开始想的时候&#xff0c;感觉不难&#xff0c;挺简单的&#xff0c;结果写的时候&#xff0c;各种思考、各种费脑&#xff0c;耗费了点…

mybatis example处理and、or关系的方法

转载自 mybatis example处理and、or关系的方法 1.( xx and xx) or ( xx and xx) 实例代码&#xff1a; BaUserExample baUserExample new BaUserExample();Criteria criteria1 baUserExample.createCriteria(); criteria1.andOrgIdEqualTo("1"); criteria1.an…