• 题解:

    • 询问区间的整循环节
    • 设区间长度为$n$
    • 如果有循环节长为$x$和$y$,那由斐蜀定理得$gcd(x,y)$也一定为一个循环节;
    • 假设最小的循环节长为$mn$,那么对于任何循环节长$x$,一定$mn | x$ , 否则$gcd(mn,x)<mn$矛盾
    • 推出$\frac{n}{x} | \frac{n}{mn}$
    • 所以每次提出$n$的一个质因子$p$,考虑是否可以分成$p$段,如果可以$n=\frac{n}{p}$继续找;
    • 最后得出来的$n$就是最短的循环节;
    • 分解质因子可以$O(n)$线筛最大/最小质因子,$O(logn)$分解;
    •  #include<bits/stdc++.h>
      #define rg register
      #define il inline
      #define ull unsigned long long
      #define base 1234567891
      using namespace std;
      const int N=;
      int vis[N],pr[N],pt,v[N],n,m,len;
      ull pw[N],h[N];
      char gc(){
      static char*p1,*p2,s[];
      if(p1==p2)p2=(p1=s)+fread(s,,,stdin);
      return(p1==p2)?EOF:*p1++;
      }
      int rd(){
      int x=;char c=gc();
      while(c<''||c>'')c=gc();
      while(c>=''&&c<='')x=(x<<)+(x<<)+c-'',c=gc();
      return x;
      }
      void pre(){
      for(rg int i=;i<=n;i++){
      if(!vis[i])pr[++pt]=i,v[i]=i;
      for(rg int j=,t;j<=pt&&pr[j]*i<=n;j++){
      vis[t=i*pr[j]]=;
      v[t]=pr[j];
      if(i%pr[j]==)break;
      }
      }
      }
      ull cal(int i,int j){return h[i+j-] - h[i-]*pw[j];}
      int main(){
      #ifndef ONLINE_JUDGE
      freopen("bzoj2795.in","r",stdin);
      freopen("bzoj2795.out","w",stdout);
      #endif
      n=rd(); pre();
      char ch=gc();while(!isalpha(ch))ch=gc();
      for(rg int i=pw[]=;i<=n;i++,ch=gc()){
      h[i]=h[i-]*base+ch;
      pw[i]=pw[i-]*base;
      }
      m=rd();
      for(rg int i=,l,r;i<=m;i++){
      l=rd(); r=rd();
      int ans=r-l+,now=ans,t;
      while(now>){
      t=ans/v[now];
      if(cal(l,ans-t)==cal(l+t,ans-t))ans/=v[now];
      now/=v[now];
      }
      printf("%d\n",ans);
      }
      return ;
      }

      bzoj2795

【bzoj2795】【Poi2012】A Horrible Poem的更多相关文章

  1. 【BZOJ2795】[Poi2012]A Horrible Poem hash

    [BZOJ2795][Poi2012]A Horrible Poem Description 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串 ...

  2. 【BZOJ 2802】 2802: [Poi2012]Warehouse Store (贪心)

    2802: [Poi2012]Warehouse Store Description 有一家专卖一种商品的店,考虑连续的n天.第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择 ...

  3. 【hash】A Horrible Poem

    [题目链接] # 10038. 「一本通 2.1 练习 4」A Horrible Poem [参考博客] A Horrible Poem (字符串hash+数论) [题目描述] 给出一个由小写英文字母 ...

  4. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  5. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  6. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  7. 【AutoMapper官方文档】DTO与Domin Model相互转换(上)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  8. 【Win 10 应用开发】应用预启动

    所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...

  9. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  10. 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】

    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...

随机推荐

  1. bcd引导Ubuntu

    下面步骤就是创建Windows的启动项了. 以管理员身份打开CMD, 然后输入 bcdedit /create /d "ubuntu" /application bootsecto ...

  2. python之爬虫_并发(串行、多线程、多进程、异步IO)

    并发 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢 import requests def fetch_async(url): res ...

  3. webpack入门指南-step02

    webpack 安装 1)安装前的准备:webpack是基于node环境的项目,所以使用前必须先安装node和npm. 在安装 Webpack 前,你本地环境需要支持 node.js.如果电脑没有装过 ...

  4. Visual Studio AI配置环境

    参考链接:http://www.cnblogs.com/ms-uap/p/9123033.html 背景: 1.能联网的电脑:Win7 64 SP1 2.鼠标.键盘.显示器好使 3.已安装VS2010 ...

  5. OO终章--总结博客

    一.测试与正确性论证的比较 从方法上看,测试是使用大量测试样例来覆盖测试代码,从而能够检测代码的实现是否正确,功能是否完善.而正确性论证是使用代码的规格和逻辑进行严密的推论和证明,从而验证代码的实现正 ...

  6. WebGL七点二

    与上一节相比这一节相当做了些整合和整理,目的是提高了读写效率和减少代码量,就是做了优化.这里我们只需要在顶点着色器中定义一个用于从js传递参数的变量u_MvcMatrix一看就知道是uniform变量 ...

  7. Code128

    条形码 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案.条形 ...

  8. c++工厂模式(Factory method)

    下面以女娲造黑人,白人,黄种人的例子来介绍一下工厂模式. 1.工厂的接口,相当于造人工厂总部. class IHumanFactory { public: IHumanFactory(void) { ...

  9. 【转】python 三种遍历list的方法

    [转]python 三种遍历list的方法 #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '__main__': list ...

  10. 关于mybatis的思考(1)——mybatis的使用实例

    架构分析 MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索.MyBatis 可以使用简 ...