hdu 3374 next表,最大最小表示法模板
来源:互联网 发布:成本估算软件 编辑:程序博客网 时间:2024/06/06 04:14
设两个指针i=0,j=1,一个长度变量k=0
a[i+k]==a[j+k] k++;
a[i+k]>a[j+k] i = i+k+1;
a[i+k]
#include<cstdio>#include<algorithm>#include<iostream>#include<string.h>using namespace std;char a[1000005];int nexta[1000005],la;int minOrMaxExpress(int flag)//flag 为true 最小表示法 false 最大表示法{ int i=0,j=1,k=0; while(i<la&&j<la&&k<la) { // printf("%d %d\n",i,j); int pre = a[(i+k)%la]-a[(j+k)%la]; if(!pre)k++; else{ if(flag) { if(pre>0)i = i+k+1; else j = j+k+1; } else { if(pre>0)j = j+k+1; else i = i+k+1; } if(i==j)j++; k = 0; } } // printf("%d\n",min(i,j)); return min(i,j);}void getNext(){ int i=0,j=-1; nexta[0] = -1; while(i<la) { if(a[i]==a[j]||j==-1) { i++; j++; nexta[i] = j; } else j = nexta[j]; }}int main(){ while(scanf("%s",a)!=EOF) { la = strlen(a); int ansMin = minOrMaxExpress(true)+1; int ansMax = minOrMaxExpress(false)+1; getNext(); int ans = la%(la-nexta[la])? 1:la/(la-nexta[la]); printf("%d %d %d %d\n",ansMin,ans,ansMax,ans); } return 0;}
0 0
- hdu 3374 next表,最大最小表示法模板
- HDU 3374 String Problem(最大最小表示法模板+KMP+next数组的运用)
- HDU 3374 String Problem(最大最小表示法 模板题)
- 最小(最大)表示法模板
- HDU 2609 How Many最大最小表示法的模板
- hdu 3374 String Problem (最小表示法+kmp next[])
- HDU 3374 String Problem (KMP+最小最大表示法)【模板】
- HDU 3374 KMP 最大表示法 最小表示法
- 字符串的最大最小表示法 模板
- HDU 3374 String Problem(最小最大表示法+KMP)
- HDU 3374 String Problem KMP-最小最大表示法
- HDU 3374String Problem(最大最小表示法+KMP)
- hdu 3374 String Problem(字符串最小最大表示法+kmp)
- hdu 3374 String Problem (kmp+最大最小表示法)
- HDU 3374 String Problem (KMP+最大最小表示法)
- hdu 3374 String Problem (最大最小表示法)
- HDU 3374 String Problem(最大最小表示法+kmp)
- hdu 3374 String Problem(KMP+最大最小表示法)
- redis 主从搭建
- Guacamole——1.实现和架构
- 动态修改QGridLayout
- 对Java异常分析的一些见解
- Python添加默认模块搜索包路径
- hdu 3374 next表,最大最小表示法模板
- V6+2C6678调试之小FPGA--S3
- 一道关于股票买卖的算法编程题
- Python实现汉诺塔移动
- Spark从外部读取数据之textFile
- QT中全屏显示子窗口的方法
- cookie 和session的工作流程
- Spring配置文件中<context:annotation-config/>
- Something inside Qt (Day 1)