这题要求的是字符串左移时字典序最小和最大的第几次出现,并求出现次数。考虑一会可以发现,出现次数和循环节是有关系的。

出现了几次,就是循环了几次,如果循环节是他本身,也就是无循环,那这个字符串不管怎么移,都只有一种情况。

关键就是求第几次出现,也就是最大最小的表示。顺便学习了一下。

#include<stdio.h>
#include<string.h>
#define maxn 1000010
int next_v[maxn],min,max;
char s[maxn];
void getnext_v()
{
int j,k,len=strlen(s);
j=;
k=-;
next_v[]=-;
while(j<len)
{
if(k==-||s[j]==s[k])
{
j++;
k++;
next_v[j]=k;
}
else k=next_v[k];
}
}
int get_min()
{
int i=,j=,k=,t,l=strlen(s);
while(i<l&&j<l&&k<l)
{
t=s[(j+k)%l]-s[(i+k)%l];
if(!t)
k++;
else
{
if(t>)
j=j+k+;
else
i=i+k+;
if(i==j)
j++;
k=;
}
}
return (i<j?i:j);
}
int get_max()
{
int i=,j=,k=,t,l=strlen(s);
while(i<l&&j<l&&k<l)
{
t=s[(j+k)%l]-s[(i+k)%l];
if(!t)
k++;
else
{
if(t<)
j=j+k+;
else
i=i+k+;
if(i==j)
j++;
k=;
}
}
return (i<j?i:j);
}
void kmp()
{
getnext_v();
int i,j,len=strlen(s),flag=;
int fl=len-next_v[len];
if(len%fl)
flag=;
min=get_min();
max=get_max(); if(flag)
{
printf("%d %d %d %d\n",min+,len/fl,max+,len/fl);
}
else
{
printf("%d 1 %d 1\n",min+,max+);
}
}
int main()
{
int i,j;
while(scanf("%s",s)!=EOF)
{
kmp();
}
}

hdu3374 KMP+最大最小表示法的更多相关文章

  1. bzoj5130 字符串的周期(kmp,最小表示法)

    bzoj5130 字符串的周期(kmp,最小表示法) bzoj 题解时间 m很大,n很小. 周期很容易求,就是kmp之后n-fail[n]. 之后对于枚举所有的字符串用最小表示法,暴力搜索. 能过就完 ...

  2. hdu3374 String Problem KMP+最大最小表示法

    Give you a string with length N, you can generate N strings by left shifts. For example let consider ...

  3. Manacher模板,kmp,扩展kmp,最小表示法模板

    *N]; //储存临时串 *N];//中间记录 int Manacher(char tmp[]) { int len=strlen(tmp); ; ;i<len;i++) { s[cnt++]= ...

  4. HDU3374 字符串最大最小表示法模板

    一开始没太看懂什么意思,拿笔反复推了一遍才大概知道最大最小表示法是怎么求的,感觉太神奇了... #include <iostream> #include <cstdio> #i ...

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

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

  6. O - String Problem KMP 字符串最小表示法

    Give you a string with length N, you can generate N strings by left shifts. For example let consider ...

  7. hdu3374最小表示法+KMP

    题意:       给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理) ...

  8. hdu3374 kmp+最小表示法

    Give you a string with length N, you can generate N strings by left shifts. For example let consider ...

  9. hdu-3374(kmp+最小表示法)

    题意:给你一个字符串,这个字符串我们可以把把他变成n个字符串按照以下规则:将当前字符串第一个放到字符串最后一位,字符串的下标依次向前推一位,比如:s[1] s[2 ]s[3] s[4]->s[2 ...

随机推荐

  1. UESTC 876 爱管闲事 --DP

    题意:即求给定n个数字(a1,a2,……an),不改变序列,分成M份,使每一份和的乘积最大. 思路:dp[i][j]表示把前i个数字,分成j份所能得到的最大乘积. 转移方程:dp[i][j] = ma ...

  2. SPOJ AMR10I Dividing Stones --DFS

    题意:给n个石头,分成一些部分(最多n部分,随便分),问分完后每部分的数量的乘积有多少种情况. 分析:可以看出,其实每个乘积都可以分解为素数的乘积,比如乘积为4,虽然可以分解为4*1,但是更可以分解为 ...

  3. UVALive 6255 Kingdoms --状态搜索

    题意:n个国家,给出国家间相互的债务关系,每个国家如果债务>收入就要破产,破产后该国的所有债务关系全部清除,第一个破产的国家不同有可能造成最后的没破产的国家的不同,问哪些国家有可能成为独自存活的 ...

  4. HDU 2491 Priest John's Busiest Day

    贪心.. #include<iostream> #include<string.h> #include<math.h> #include <stdio.h&g ...

  5. android studio没有org.apache.http.client.HttpClient;等包问题 解决方案

    以前用Eclipse做Android开发工具一直使用apache的http做网络请求,最近换用了Android studio发现没有办法引用apache的包,下面是我引用的步骤

  6. Unity3D开发之搭建Mac OS开发环境

    运行图 首先上几张图 IOS模拟器 坚屏 横屏 打包任务 摸索了一上午,才搞定在模拟器中运行.至于在Iphone真机中运行,虽然有开发者证书,目前还没在Xcode中配置好. 我今天第一次接触并使用MA ...

  7. 转: Github访问慢解决办法

    from: https://yq.aliyun.com/articles/36744 Github访问慢解决办法   zxiaofan 2016-04-20 17:25:00 浏览2156 评论0 摘 ...

  8. man 在线手册

    http://man7.org/linux/man-pages/man3/fwrite.3.html

  9. Mvc 中ViewBag Model 查找不到解决

    按照晚上修改VIew视图中web.config 很显然,没效果... 我的情况是 出现: 我想了下  看下是不是编译器的问题: 我在vs2013中建立 MVC4  然后用 vs2015打开 然后报错- ...

  10. 27Spring_的事务管理_银行转账业务加上事务控制_基于tx.aop进行声明式事务管理

    上一篇文章中,银行转账业务没有使用事务,会出现问题,所以这篇文章对上篇文章出现的问题进行修改. 事务 依赖 AOP , AOP需要定义切面, 切面由Advice(通知) 和 PointCut(切点) ...