zoukankan      html  css  js  c++  java
  • hdu3374 String Problem 最小最大表示法 最小循环节出现次数

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    int nxt[1000005], len;
    char a[1000005];
    void mknxt(){
    	int i=0, j;
    	nxt[0] = j = -1;
    	while(i<len){
    		if(j==-1 || a[i]==a[j])	nxt[++i] = ++j;
    		else	j = nxt[j];
    	}
    }
    int getMin(){
    	int i=0, j=1, k=0;
    	while(i<len && j<len && k<len){
    		int t=a[(i+k)%len]-a[(j+k)%len];
    		if(!t)	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=a[(i+k)%len]-a[(j+k)%len];
    		if(!t)	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", a)!=EOF){
    		memset(nxt, 0, sizeof(nxt));
    		len = strlen(a);
    		mknxt();
    		int cnt=len-nxt[len];
    		if(len%cnt)	cnt = 1;
    		else	cnt = len / cnt;
    		printf("%d %d %d %d
    ", getMin()+1, cnt, getMax()+1, cnt);
    	}
    }
    
  • 相关阅读:
    数据类型
    表达式
    类型
    go杂货铺
    rest framework
    go 学习之路(三)
    go 学习之路(二)
    文件管理之字符处理命令,打包压缩
    文件管理之文件查找,上传下载,输出重定向
    文本命令之三剑客初探
  • 原文地址:https://www.cnblogs.com/poorpool/p/7906122.html
Copyright © 2011-2022 走看看