hdu3374 KMP+最大最小表示法
这题要求的是字符串左移时字典序最小和最大的第几次出现,并求出现次数。考虑一会可以发现,出现次数和循环节是有关系的。
出现了几次,就是循环了几次,如果循环节是他本身,也就是无循环,那这个字符串不管怎么移,都只有一种情况。
关键就是求第几次出现,也就是最大最小的表示。顺便学习了一下。
#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+最大最小表示法的更多相关文章
- bzoj5130 字符串的周期(kmp,最小表示法)
bzoj5130 字符串的周期(kmp,最小表示法) bzoj 题解时间 m很大,n很小. 周期很容易求,就是kmp之后n-fail[n]. 之后对于枚举所有的字符串用最小表示法,暴力搜索. 能过就完 ...
- hdu3374 String Problem KMP+最大最小表示法
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
- Manacher模板,kmp,扩展kmp,最小表示法模板
*N]; //储存临时串 *N];//中间记录 int Manacher(char tmp[]) { int len=strlen(tmp); ; ;i<len;i++) { s[cnt++]= ...
- HDU3374 字符串最大最小表示法模板
一开始没太看懂什么意思,拿笔反复推了一遍才大概知道最大最小表示法是怎么求的,感觉太神奇了... #include <iostream> #include <cstdio> #i ...
- hdu 3374 String Problem (kmp+最大最小表示法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:输出最大和最小的是从哪一位开始的,同时输出最小循环节的个数. 这里简单介绍对字符串最小 ...
- O - String Problem KMP 字符串最小表示法
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
- hdu3374最小表示法+KMP
题意: 给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理) ...
- hdu3374 kmp+最小表示法
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
- hdu-3374(kmp+最小表示法)
题意:给你一个字符串,这个字符串我们可以把把他变成n个字符串按照以下规则:将当前字符串第一个放到字符串最后一位,字符串的下标依次向前推一位,比如:s[1] s[2 ]s[3] s[4]->s[2 ...
随机推荐
- Linux (二) vi
1 步骤 1) vi test.txt 进入一般模式 2) i 进入编辑模式,输入内容 3) Esc 回到一般模式 4) :wq 存储后退出 2 编辑模式 [i] 光标处插入, ...
- HDU 4460 Friend Chains --BFS
题意:问给定的一张图中,相距最远的两个点的距离为多少.解法:跟求树的直径差不多,从1 开始bfs,得到一个最远的点,然后再从该点bfs一遍,得到的最长距离即为答案. 代码: #include < ...
- POJ 1201 Intervals
题意:有n个区间[a,b],每个区间有一个值c.找一个集合中的元素使得每个区间至少有c个元素在这个集合中,问最小的集合大小. 思路:设d[i+1]表示0到i有多少个数在这个集合中,显然对于每个区间,d ...
- nginx 一二事(2) - 创建虚拟静态服务器
一.什么是nginx 是一个C语言开发的HTTP反向代理服务器,性能非常高 一个俄罗斯的哥们开发的,官方提供的测试性能能够达到5W的并发,我的天呐~,实际测试差不多是2W,而淘宝的牛人可以优化到200 ...
- AC日记——斗地主(dfs)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- 性能测试一般过程与LR性能测试过程
性能测试作为测试分类的一个大类,等同于系统测试中的功能测试.安全性测试和配置测试等,因此她的测试过程是对整个测试类型中测试过程的一个描述,因此包含了测试需要的确认目标,熟悉系统.获得需求等部分,因此性 ...
- html中的src与href的区别
写代码的时候就经常把这两个属性弄混淆,到底是href还是src,href标识超文本引用,用在link和a等元素上,href是引用和页面关联,是在当前元素和引用资源之间建立联系,src表示引用资源,表示 ...
- homepage左边的导航菜单怎么做的?
homepage左边的导航菜单怎么做的? 为啥只在homepage页面写了一个div 然后用一个homepage.js来填充这个div 然后用一个外部容器ID作为homepage.js的参数
- 如何在.net4.0中使用.net4.5的async/await
推荐文章: http://www.cnblogs.com/hj4444/p/3857771.html http://www.cnblogs.com/dozer/archive/2012/03/06/a ...
- C#属性: 利用set实现递归
直接帖代码: public class Bird { int xdata; /// <summary> /// 属性的简洁写法,等同于下面的xData方式 /// </summary ...