hdu 3374 最大最小表示法 next
题目大意:
就是求一个串的最大最小表示法的开始下标,然后求有多少个做大最小表示,输出格式为 最小表示下标 它的个数 最大表示下标 它的个数
基本思路:
最小最大表示法模板题,然后求一下循环节,很容易知道,循环节和最大最小表示数量上相等,然后问题就解决啦;
代码如下:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm> using namespace std; const int inf = 0x3f3f3f3f;
const int maxn = 1000000+10; char T[maxn];
int len;
int nx[maxn];
void getNext(){
int j=0,k=-1;
nx[0]=-1;
while(j<len){
if(k==-1||T[k]==T[j]){
nx[++j]=++k;
}else{
k=nx[k];
}
}
}
int getMin(){
int i=0,j=1,k=0;
while(i<len&&j<len&&k<len){
int t=T[(i+k)%len]-T[(j+k)%len];
if(t==0) k++;
else{
if(t>0) i+=k+1;
else j+=k+1;
if(i==j) j++;
k=0;
}
}
return min(i,j);
}
int getMax(){
int i=0,j=1,k=0;
while(i<len&&j<len&&k<len){
int t=T[(i+k)%len]-T[(j+k)%len];
if(t==0) k++;
else{
if(t>0) j+=k+1;
else i+=k+1;
if(i==j) j++;
k=0;
}
}
return min(i,j);
}
int main(){
while(scanf("%s",T)!=EOF){
len=strlen(T);
getNext();
int mi=getMin();
int mx=getMax();
int t=len-nx[len];
int cnt=1;
if(len%t==0) cnt=len/t;
printf("%d %d %d %d\n",mi+1,cnt,mx+1,cnt);
}
return 0;
}
hdu 3374 最大最小表示法 next的更多相关文章
- hdu String Problem(最小表示法入门题)
hdu 3374 String Problem 最小表示法 view code#include <iostream> #include <cstdio> #include &l ...
- Favorite Donut(HDU 5442)最小表示法+二分
题目给出一个字符串,由a~z表示甜度,随字典序增大,字符串首尾相连形成一个圈,要求从一个位置开始字典序最大的字符串,输出位置以及是顺时针还是逆时针表示.顺时针用0表示,逆时针用1表示. 此题只需要查找 ...
- hdu 2609 字符串最小表示法 虽然不是很懂 还是先贴上来吧。/,。/
还需要再消化一下这个算法.. 今天没有时间了,, 六级过了 就有大把时间 快活啊!#include<iostream> #include<cstdio> #include< ...
- HDU 3374 String Problem(KMP+最大/最小表示)
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 3374 最小/大表示法+KMP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意:给定一个串s,该串有strlen(s)个循环同构串,要求输出字典序最小的同构串的下标,字典 ...
- HDU - 3374 String Problem (kmp求循环节+最大最小表示法)
做一个高产的菜鸡 传送门:HDU - 3374 题意:多组输入,给你一个字符串,求它最小和最大表示法出现的位置和次数. 题解:刚刚学会最大最小表示法,amazing.. 次数就是最小循环节循环的次数. ...
- hdu 3374 String Problem(kmp+最小表示法)
Problem Description Give you a string with length N, you can generate N strings by left shifts. For ...
- String Problem HDU - 3374(最大最小表示法+循环节)
题意: 给出一个字符串,问这个字符串经过移动后的字典序最小的字符串的首字符位置和字典序最大的字符串的首字符的位置,和能出现多少次最小字典序的字符串和最大字典序的字符串 解析: 能出现多少次就是求整个字 ...
- HDU 3374 String Problem (KMP+最大最小表示)
HDU 3374 String Problem (KMP+最大最小表示) String Problem Time Limit: 2000/1000 MS (Java/Others) Memory ...
随机推荐
- unittest接口自动化测试报告
unittest接口自动化测试报告 展示: 代码: __author__ = "Wai Yip Tung, Findyou" __version__ = "0.8.2.1 ...
- memcache、mongodb、redis的对比区别
>>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...
- config.properties
# 数据库配置db.host=10.100.2.50db.port=3306db.database=paycoredb.username=rootdb.password=mysql@123db.ini ...
- 服务器中卸载JDK
- Oracle with as语法
with as优点 增加了sql的易读性,如果构造了多个子查询,结构会更清晰: 更重要的是:“一次分析,多次使用”,这也是为什么会提供性能的地方,达到了“少读”的目标 用法:给查询的语句起个别名 e. ...
- epoll学习
一.epoll_create #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags) ...
- 【软工项目Beta阶段】博客目录
绝不划水队Beta冲刺阶段博客目录 一.Scrum Meeting 第十周会议记录 第十一周会议记录 二.测试报告 Beta阶段测试报告 三.习得的软工原理/方法/技能? (1)在进行OUC-Mark ...
- ssm项目配置多个数据源
在项目中到一些问题,一些查询模块需要链接另一个数据库,这时,就可以配置两个数据源进行操作. 1.创建jdbc.properties jdbc.url = jdbc:mysql://localhost: ...
- php函数的使用技巧
函数的使用技巧 1. do{...}while(false)的用法 作用:使用do{...}while(false)结构可以简化多级判断时代码的嵌套. 例子: 现在要实现一个功能,但需要A.B.C.D ...
- 70、saleforce的Json输出
List<Merchandise__c> merchandise = [select Id,Name,Price__c,Quantity__c from Merchandise__c li ...