hdu4333
题解:
EX_KMP
先把串复制一遍放到后面
这样旋转就是每一个前缀了
然后做一个EX_KMP
然后看一下后一个字符谁大谁小
代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define next ____next
const int N=;
char s[N];
int T,next[N],cas;
void getnext(char *a,int len)
{
int i=-,j=;
next[]=-;
while (j<len)
{
if (i==-||a[i]==a[j])next[++j]=++i;
else i=next[i];
}
}
void getex(char *a,int len)
{
int k=,i=;
next[]=len;
while (k+<len&&a[k]==a[k+])k++;
next[]=k;
k=;
while (++i<=len/)
{
int maxr=next[k]+k-;
next[i]=min(next[i-k],max(,maxr-i+));
while (i+next[i]<len&&a[next[i]]==a[next[i]+i])next[i]++;
if (i+next[i]>k+next[k])k=i;
}
}
int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%s",&s);
int len=strlen(s);
getnext(s,len);
int tmp=len%(len-next[len])==?len/(len-next[len]):;
for (int i=;i<=len;i++)s[i+len]=s[i];
getex(s,len*);
int a=,b=,c=;
for (int i=;i<len;i++)
{
if (next[i]>=len)b++;
else if (s[next[i]+i]>s[next[i]])c++;
else a++;
}
printf("Case %d: %d %d %d\n",++cas,a/tmp,b/tmp,c/tmp);
}
}
hdu4333的更多相关文章
- 【HDU4333】Revolving Digits(扩展KMP+KMP)
		
Revolving Digits Description One day Silence is interested in revolving the digits of a positive i ...
 - [hdu4333]Revolving Digits
		
/*注意注意:本题非hdu4333原题,而是简化版,原版有多组数据.但此代码在修改输入后依旧可以通过多组数据*/ 给出一个数字串,问有多少本质不同同构串比原串小,一样,大.同构串是指,对于原串S[1- ...
 - hdu4333 扩展KMP
		
慢慢研究可以发现,可以用扩展kmp来求.由于扩展kmp的next[]只有一部分,当前位子前面那部分和母串的后部分,所以可以将字符串复制接在后面一次. 先求如果next[]>0&& ...
 - hdu4333 Revolving Digits(扩展kmp)
		
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
 - Revolving Digits(hdu4333)
		
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
 - 扩展KMP题目
		
hdu4333 /* 题意:字符串s[0..n-1],每次把最后一个字符放到前面,求形成的字符串比最初串分别小,相同,大于的个数 因为是为了练习扩展KMP所以肯定是扩展KMP, 为了循环方便,在后面复 ...
 
随机推荐
- 维特比算法Python实现
			
前言 维特比算法是隐马尔科夫问题的一个基本问题算法.维特比算法解决的问题是已知观察序列,求最可能的标注序列. 什么是维特比算法? 维特比算法尽管是基于严格的数学模型的算法,但是维特比算法毕竟是算法,因 ...
 - 封装TeeChart控件
			
public class MyChart { //字段 private TChart tChart; /// <summary> /// 构造函数,默认不是3D效果 /// </su ...
 - 将DevExpress.Utils.ImageCollection变量的image导出
			
private void tspBtnExportExcel_Click(object sender, EventArgs e) { //暂时用来导出图片 string filePath = Syst ...
 - 【第四章】 springboot + swagger
			
注:本文参考自 http://www.jianshu.com/p/0465a2b837d2 swagger用于定义API文档. 好处: 前后端分离开发 API文档非常明确 测试的时候不需要再使用URL ...
 - [Java中实现国际化] - 配合thymeleaf实现中英文自动切换(多语言)
			
MOOC该链接第三章第二节 尚硅谷SpringBoot全集 web开发国际化 xjbo (7天,过期可以留言索取) resources下建立文件 上到下为: 默认的,英语(美国),中文(中国) en ...
 - Spring资源加载基础ClassLoader
			
1 ClassLoader工作机制 1.1 ClassLoader作用 寻找类字节码文件并构造出类在JVM内部表示的组件.负责运行时查找和装入Class字节码文件 1.2 装载步骤 1.2.1 装载 ...
 - Linux command line exercises for NGS data processing
			
by Umer Zeeshan Ijaz The purpose of this tutorial is to introduce students to the frequently used to ...
 - python 集合的比较
			
setx = set(["apple", "mango"]) sety = set(["mango", "orange" ...
 - python 二叉排序树
			
class BSTNode: def __init__(self, data, left=None, right=None): self.data = data self.left = left se ...
 - [原][OSG][osgBullet][osgworks][bullet]编译osgBullet尝试物理引擎
			
相关网址: 类似文章:http://blog.csdn.net/lh1162810317/article/details/17475297 osgBullet官网:http://osgbullet.v ...