HDU - 3374 String Problem (kmp求循环节+最大最小表示法)
做一个高产的菜鸡
传送门:HDU - 3374
题意:多组输入,给你一个字符串,求它最小和最大表示法出现的位置和次数。
题解:刚刚学会最大最小表示法,amazing.. 次数就是最小循环节循环的次数。
- #include<bits/stdc++.h>
- using namespace std;
- int nt[1000100],b[1000100];
- char a[1000100];
- void kmp_nt(int m)
- {
- int i,j;
- i = 0;
- nt[0] = j =-1;
- while(i < m){
- while(j!=-1&&a[i]!=a[j])
- j = nt[j];
- if(a[i]==a[j]||j==-1){
- i++;
- j++;
- nt[i]=j;
- }
- }
- }
- int Getmin(char s[])
- {
- int n = strlen(s);
- int i = 0,j = 1,k = 0,t;
- //表示从i开始k长度和从j开始k长度的字符串相同
- while(i<n&&j<n&&k<n){
- t = s[(i+k)%n]-s[(j+k)%n];
- //t用来计算相对应位置上那个字典序较大
- if(!t) k++;//字符相等的情况
- else{
- if(t>0) i+=k+1;//i位置大,最大表示法: j += k+1
- else j+=k+1;//j位置大,最大表示法: i += k+1
- if(i==j) j++;
- k=0;
- }
- }
- return i>j?j:i;
- }
- int GetMax(char s[]){
- int len = strlen(s);
- int i=0,j=1,k=0;
- while(i<len&&j<len&&k<len){
- int t=s[(i+k)%len]-s[(j+k)%len];
- if(t==0)k++;
- else{
- if(t>0)j=j+k+1;
- else i=i+k+1;
- if(i==j)j++;
- k=0;
- }
- }
- return i<j?i:j;
- }
- int main()
- {
- while(scanf("%s",a)!=EOF){
- int len=strlen(a);
- kmp_nt(len);
- int k=1;
- int ans=len-nt[len];
- if(len%ans==0) k=len/ans;
- int mi=Getmin(a);
- int ma=GetMax(a);
- cout<<mi+1<<' '<<k<<' '<<ma+1<<' '<<k<<endl;
- }
- return 0;
- }
HDU - 3374 String Problem (kmp求循环节+最大最小表示法)的更多相关文章
- HDU 3746 Cyclic Nacklace (KMP求循环节问题)
<题目链接> 题目大意: 给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数. [>>>kmp next函数 kmp的周期问题] #include &l ...
- hdu 3374 String Problem(kmp+最小表示法)
Problem Description Give you a string with length N, you can generate N strings by left shifts. For ...
- HDU 3374 String Problem(KMP+最大(最小)表示)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:给出一个字符串,依次左移一个单位形成一堆字符串,求其字典序最小和最大的字符串需要左移多 ...
- HDU 3374 String Problem (KMP+最大最小表示)
KMP,在有循环节的前提下: 循环节 t = len-next[len], 个数num = len/(len-next[len]);个人理解,如果有循环节,循环节长度必定小于等于len/2, 换句话说 ...
- HDU 3374 String Problem
最大最小表示法与KMP求循环节 最大最小表示法 最大最小表示法与KMP求循环节的模板题, #include <iostream> #include <cstdio> #incl ...
- HDU 3374 String Problem (KMP+最大最小表示)
HDU 3374 String Problem (KMP+最大最小表示) String Problem Time Limit: 2000/1000 MS (Java/Others) Memory ...
- hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)
Problem - 3374 KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html 循环节推导的证明相当 ...
- HDU 3374 String Problem(KMP+最大/最小表示)
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 3374 String Problem (kmp+最大最小表示法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:输出最大和最小的是从哪一位开始的,同时输出最小循环节的个数. 这里简单介绍对字符串最小 ...
随机推荐
- MongoDB Sharding(一) -- 分片的概念
(一)分片的由来随着系统的业务量越来越大,业务系统往往会出现这样一些特点: 高吞吐量 高并发 超大规模的数据量 高并发的业务可能会耗尽服务器的CPU,高吞吐量.超大规模的数据量也会带来内存.磁盘的压力 ...
- Docker学习笔记之搭建Docker私有仓库
Docker仓库服务器名为Docker注册(registry)服务器.可以使用docker push命令将镜像上传到注册服务器,也可以使用docker pull命令下载服务器的镜像. Docker注册 ...
- 四:WEB源码扩展
前言:WEB源码在安全测试中是非常重要的信息来源,可以用来进行代码审计漏洞也可以用来做信息突破口,其中WEB源码有很多技术需要简明分析,获取某ASP源码后就可以采用默认数据库下载为突破,获取某其他脚本 ...
- (二)数据源处理6-excel数据转换实战(下)
将结果的所有数据整理如下: {'api_case_01': [{'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是' ...
- MyBatis初级实战之二:增删改查
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 记录Js动态加载页面.append、html、appendChild、repend添加元素节点不生效以及解决办法
今天再优化blog页面的时候添加了个关注按钮和图片,但是页面上这个按钮和图片时有时无,本来是搞后端的,被这个前端的小问题搞得抓耳挠腮的! 网上各种查询解决方案,把我解决问题的艰辛历程分享出来,希望大家 ...
- JS编写的科学计算器
最近半个月编写了一个JS+CSS+HTML的网页计算器,从最初的具有简陋界面的简单计算器改版到最终具有科学/标准计算器转换功能并且界面非常友好的计算器,收获良多!总的来说,代码简单,通俗易读,下面贴上 ...
- CSS3+JS完美实现放大镜模式
最近看到一篇讲放大镜的文章,实践后感觉效果非常好,这里分享给大家. 效果如下: 其实现核心: CSS函数,如:calc() -- 动态计算:var() -- 使用自定义变量 CSS伪元素:::befo ...
- response返回特性
1. response 返回特性 r=requests.get("http://www.baidu.com")print(r.text) #打印返回正文print(r.status ...
- Python内存浅析
Python内存分析 内存机制 转述:内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构. Python的内存机制和Java差不多,分为 ...