做一个高产的菜鸡

传送门:HDU - 3374

题意:多组输入,给你一个字符串,求它最小和最大表示法出现的位置和次数。

题解:刚刚学会最大最小表示法,amazing.. 次数就是最小循环节循环的次数。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int nt[1000100],b[1000100];
  5. char a[1000100];
  6.  
  7. void kmp_nt(int m)
  8. {
  9. int i,j;
  10. i = 0;
  11. nt[0] = j =-1;
  12. while(i < m){
  13. while(j!=-1&&a[i]!=a[j])
  14. j = nt[j];
  15. if(a[i]==a[j]||j==-1){
  16. i++;
  17. j++;
  18. nt[i]=j;
  19. }
  20. }
  21. }
  22.  
  23. int Getmin(char s[])
  24. {
  25. int n = strlen(s);
  26. int i = 0,j = 1,k = 0,t;
  27. //表示从i开始k长度和从j开始k长度的字符串相同
  28. while(i<n&&j<n&&k<n){
  29. t = s[(i+k)%n]-s[(j+k)%n];
  30. //t用来计算相对应位置上那个字典序较大
  31. if(!t) k++;//字符相等的情况
  32. else{
  33. if(t>0) i+=k+1;//i位置大,最大表示法: j += k+1
  34. else j+=k+1;//j位置大,最大表示法: i += k+1
  35. if(i==j) j++;
  36. k=0;
  37. }
  38. }
  39. return i>j?j:i;
  40. }
  41.  
  42. int GetMax(char s[]){
  43. int len = strlen(s);
  44. int i=0,j=1,k=0;
  45. while(i<len&&j<len&&k<len){
  46. int t=s[(i+k)%len]-s[(j+k)%len];
  47. if(t==0)k++;
  48. else{
  49. if(t>0)j=j+k+1;
  50. else i=i+k+1;
  51. if(i==j)j++;
  52. k=0;
  53. }
  54. }
  55. return i<j?i:j;
  56. }
  57.  
  58. int main()
  59. {
  60. while(scanf("%s",a)!=EOF){
  61. int len=strlen(a);
  62. kmp_nt(len);
  63. int k=1;
  64. int ans=len-nt[len];
  65. if(len%ans==0) k=len/ans;
  66. int mi=Getmin(a);
  67. int ma=GetMax(a);
  68. cout<<mi+1<<' '<<k<<' '<<ma+1<<' '<<k<<endl;
  69. }
  70. return 0;
  71. }

HDU - 3374 String Problem (kmp求循环节+最大最小表示法)的更多相关文章

  1. HDU 3746 Cyclic Nacklace (KMP求循环节问题)

    <题目链接> 题目大意: 给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数. [>>>kmp next函数 kmp的周期问题]  #include &l ...

  2. hdu 3374 String Problem(kmp+最小表示法)

    Problem Description Give you a string with length N, you can generate N strings by left shifts. For ...

  3. HDU 3374 String Problem(KMP+最大(最小)表示)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:给出一个字符串,依次左移一个单位形成一堆字符串,求其字典序最小和最大的字符串需要左移多 ...

  4. HDU 3374 String Problem (KMP+最大最小表示)

    KMP,在有循环节的前提下: 循环节 t = len-next[len], 个数num = len/(len-next[len]);个人理解,如果有循环节,循环节长度必定小于等于len/2, 换句话说 ...

  5. HDU 3374 String Problem

    最大最小表示法与KMP求循环节 最大最小表示法 最大最小表示法与KMP求循环节的模板题, #include <iostream> #include <cstdio> #incl ...

  6. HDU 3374 String Problem (KMP+最大最小表示)

    HDU 3374 String Problem (KMP+最大最小表示) String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  7. hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)

    Problem - 3374   KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html   循环节推导的证明相当 ...

  8. HDU 3374 String Problem(KMP+最大/最小表示)

    String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. hdu 3374 String Problem (kmp+最大最小表示法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:输出最大和最小的是从哪一位开始的,同时输出最小循环节的个数. 这里简单介绍对字符串最小 ...

随机推荐

  1. MongoDB Sharding(一) -- 分片的概念

    (一)分片的由来随着系统的业务量越来越大,业务系统往往会出现这样一些特点: 高吞吐量 高并发 超大规模的数据量 高并发的业务可能会耗尽服务器的CPU,高吞吐量.超大规模的数据量也会带来内存.磁盘的压力 ...

  2. Docker学习笔记之搭建Docker私有仓库

    Docker仓库服务器名为Docker注册(registry)服务器.可以使用docker push命令将镜像上传到注册服务器,也可以使用docker pull命令下载服务器的镜像. Docker注册 ...

  3. 四:WEB源码扩展

    前言:WEB源码在安全测试中是非常重要的信息来源,可以用来进行代码审计漏洞也可以用来做信息突破口,其中WEB源码有很多技术需要简明分析,获取某ASP源码后就可以采用默认数据库下载为突破,获取某其他脚本 ...

  4. (二)数据源处理6-excel数据转换实战(下)

    将结果的所有数据整理如下: {'api_case_01': [{'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是' ...

  5. MyBatis初级实战之二:增删改查

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. 记录Js动态加载页面.append、html、appendChild、repend添加元素节点不生效以及解决办法

    今天再优化blog页面的时候添加了个关注按钮和图片,但是页面上这个按钮和图片时有时无,本来是搞后端的,被这个前端的小问题搞得抓耳挠腮的! 网上各种查询解决方案,把我解决问题的艰辛历程分享出来,希望大家 ...

  7. JS编写的科学计算器

    最近半个月编写了一个JS+CSS+HTML的网页计算器,从最初的具有简陋界面的简单计算器改版到最终具有科学/标准计算器转换功能并且界面非常友好的计算器,收获良多!总的来说,代码简单,通俗易读,下面贴上 ...

  8. CSS3+JS完美实现放大镜模式

    最近看到一篇讲放大镜的文章,实践后感觉效果非常好,这里分享给大家. 效果如下: 其实现核心: CSS函数,如:calc() -- 动态计算:var() -- 使用自定义变量 CSS伪元素:::befo ...

  9. response返回特性

    1. response 返回特性 r=requests.get("http://www.baidu.com")print(r.text) #打印返回正文print(r.status ...

  10. Python内存浅析

    Python内存分析 内存机制 转述:内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构. Python的内存机制和Java差不多,分为 ...