• 题解

    • 首先题中说了$n>=m$;
    • 分成的循环串左右两边为本质相同的单循环串循环串,分别长为$l = \frac{n + m}{2} $;
    • 所以$S$串的前$l$位为双循环串的一半$S1$,后一半为$S2$;
    • 倍长$S1$找到$S2$在$S1$中出现的位置,把单循环串匹配位置后的剩下的$m$位哈希存下来;
    • 读入每个$T$串查找即可
    • 注意有可能$S2$在$S1$中会重复出现,记录$last$防止重复计算;
    •  #include<bits/stdc++.h>
      #define ull unsigned long long
      #define base 1234567891
      #define il inline
      #define rg register
      using namespace std;
      const int N=,sz=1e7;
      int n,m,k,l,t1,t2,o,nt[sz],hd[sz],w[sz],nxt[N<<],lst[sz];
      char s[N<<],t[N<<];
      ull h[N<<],v[sz],pw,ans;
      il char gc(){
      static char*p1,*p2,buf[];
      if(p1==p2)p2=(p1=buf)+fread(buf,,,stdin);
      return(p1==p2)?EOF:*p1++;
      }
      il int rd(){
      int x=; char c=gc();
      while(c<''||c>'')c=gc();
      while(c>=''&&c<='')x=x*+c-'',c=gc();
      return x;
      }
      il char gt(){char c=gc();while(!isalpha(c))c=gc();return c;}
      void solve(){
      for(rg int i=;i<=n;i++){
      for(rg int j=;j<=l;j++)h[j]=h[j-]*base+(s[j]=gt());
      for(rg int j=;j<=l;j++)h[j+l]=h[j+l-]*base+s[j];
      if(t1)t[]=gt();
      for(rg int j=,tj=;j<=t1;nxt[++j]=tj){
      t[j]=gt();
      while(tj&&t[j]!=t[tj+])tj=nxt[tj];
      if(t[j]==t[tj+])tj++;
      }
      for(rg int j=,tj=;j<=l+max(,t1-);j++){
      while(tj&&s[j]!=t[tj+])tj=nxt[tj];
      if(s[j]==t[tj+])tj++;
      if(!t1||tj==t1){
      ull x = h[j+t2] - h[j]*pw;
      int fg=;
      for(int r=hd[x%sz];r;r=nt[r])if(v[r]==x){
      fg=;
      if(lst[r]!=i)w[r]++,lst[r]=i;
      break;
      }
      if(!fg)nt[++o]=hd[x%sz],v[hd[x%sz]=o]=x,w[o]=,lst[o]=i;
      tj=nxt[tj];
      }
      }
      }
      t1-=l;
      for(rg int i=;i<=m;i++){
      ull x=;for(rg int j=;j<=t2;j++)x=x*base+gt();
      for(int r=hd[x%sz];r;r=nt[r])if(v[r]==x){ans+=w[r];break;}
      }
      }
      int main(){
      #ifndef ONLINE_JUDGE
      freopen("bzoj4084.in","r",stdin);
      freopen("bzoj4084.out","w",stdout);
      #endif
      n=rd();m=rd();t1=rd();t2=rd();l=(t1+t2)>>;
      t1-=l;for(int i=pw=;i<=t2;i++)pw=pw*base;
      solve();
      printf("%llu\n",ans);
      return ;
      }

      bzoj4084

【bzoj4084】【sdoi2015】双旋转字符串的更多相关文章

  1. [bzoj4084][Sdoi2015]双旋转字符串_hash

    双旋转字符串 bzoj-4084 Sdoi-2015 题目大意:给定两个字符串集合 S 和 T .其中 S 中的所有字符串长度都恰好为 N ,而 T 中所有字符串长度都恰好为 M .且 N+M 恰好为 ...

  2. BZOJ 4084 [Sdoi2015]双旋转字符串

    题解:hash 至今不会unsigned long long 的输出 把B扔进map 找A[mid+1][lenA]在A[1][mid]中的位置 把A[1][mid]贴两遍(套路) 枚举A[mid+1 ...

  3. bzoj 4084 双旋转字符串

    给两个集合A,B,找满足要求的(a,b)的对数,可以计算对于a,哪些b成立. 还有就是字符串hash的使用,感觉平时用字符串hash太少了. /**************************** ...

  4. 剑指Offer面试题:34.翻转单词顺序VS左旋转字符串

    一.题目一:翻转单词顺序 1.1 题目说明 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...

  5. 【面试题042】翻转单词顺序VS左旋转字符串

    [面试题042]翻转单词顺序VS左旋转字符串 题目一:     输入一个英文句子,反转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.     例如输入字符串“I a ...

  6. lintcode :旋转字符串

    题目: 旋转字符串 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例 对于字符串 "abcdefg". offset=0 => "abcdef ...

  7. 九度OJ 1362 左旋转字符串(Move!Move!!Move!!!)【算法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1362 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运 ...

  8. LintCode 面试题 旋转字符串

    1.题目描述 题目链接:http://www.lintcode.com/zh-cn/problem/rotate-string/ 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 2. ...

  9. 1289 大鱼吃小鱼 1305 Pairwise Sum and Divide 1344 走格子 1347 旋转字符串 1381 硬币游戏

    1289 大鱼吃小鱼 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼.从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右 ...

随机推荐

  1. 从零开始的Python学习Episode 19——面向对象(2)

    面向对象之继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称 为基类或超类,新建的类称为派生类或子类. 子类会“”遗传”父类的属性,从而解决代码重用问 ...

  2. truffle Dapp 搭建

    安装truffle $ npm install -g truffle 依赖环境 NodeJS 访问https://nodejs.org 官方网站下载安装 系统:Windows, Linux or Ma ...

  3. OSSEC 架构

    OSSEC由很多部分组成,它有一个集中的管理端,用于监控.并接收来自代理.syslog.数据库或无代理设备的日志. 管理端(服务器) 管理端属于OSSEC部署中的中心部分.它存储了文件完整性检测数据库 ...

  4. 获400 万美元 A 轮融资,ShipBob 想帮助小微企业享受Amazon Prime 级配送服务 2016-06-18

    Weiss认为,无论零售市场的发展走向如何波动,ShipBob公司都能够获得坚实的成长表现. 在线销售实体商品的小型企业当然希望利用种种方式取悦客户,但面对着Amazon Prime迅如闪电且价格实惠 ...

  5. BugPhobia发布篇章:学霸在线系统正式发布

    Alpha阶段的服务器部署和移植工作最终完成,http://10.2.26.67/,期待您的访问~ 首先,请允许bugphobia团队对您的访问给予感谢以及诚恳的致歉.受服务器端的硬件限制,目前学霸在 ...

  6. caffe可视化模型

    进入$CAFFE_ROOT/python: $ python draw_net.py ../models/bvlc_reference_caffenet/train_val.prototxt caff ...

  7. Software Defined Networking(Week 3, part 1)

    Control and Data Plane Seperation 课程地址 Overview 今天正式地学习一个控制与数据平面分离.学习完本节,应该要掌握何为控制和数据平面,了解它们的功能以及好处, ...

  8. js访问对象属性的两种方法

    var obj={name:'fuuf',age:19} 第一种,用.访问 obj.name 第二种 用[]访问 obj['name']  //此时name是字符串,要加引号 注意事项 使用第二种方法 ...

  9. 性能分析_linux服务器CPU_中断

    中断 1.  指标范围 1.1  Interrupt rate 应该与cpu利用率结合分析,如果cpu利用率在合理范围内,大量的中断也是可以接受的.一个巨大的中断值,同时伴随着缓慢的系统性能表现,指示 ...

  10. 关于2013年1月21日的DNS故障分析文章

    首页 资讯 小组 资源 注册 登录       首页 最新文章 业界 开发 IT技术 设计 创业 IT职场 访谈 在国外 经典回顾 更多 > - 导航条 - 首页 最新文章 业界 - Googl ...