• HDU 3746 Cyclic Nacklace


    这是一道求最小循环节的题,利用KMP的next数组求一个序列的最小循环节,
    由next数组的定义可知,对于一个长为len的字符串来说,next[len]即为该字符串的最大公共前缀后缀,
    所以该字符串的最小循环节为 len-next[len],

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    const int MAXN=100005;
    int init(){
    	int rv=0,fh=1;
    	char c=getchar();
    	while(c<'0'||c>'9'){
    		if(c=='-') fh=-1;
    		c=getchar();
    	}
    	while(c>='0'&&c<='9'){
    		rv=(rv<<1)+(rv<<3)+c-'0';
    		c=getchar();
    	}
    	return fh*rv;
    }
    int T,nxt[MAXN],len;
    char s[MAXN];
    void getnxt(){
    	nxt[0]=-1;
    	int k=-1,j=0;
    	while(j<len){
    		if(k==-1||s[k]==s[j]){
    			nxt[++j]=++k;
    		}else k=nxt[k];
    	}
    }
    int main(){
    	//freopen("in.txt","r",stdin);
    	cin>>T;
    	while(T--){
    		scanf("%s",s);
    		len=strlen(s);
    		getnxt();
    		int ans=len-nxt[len];
    		if(nxt[len]==0) printf("%d
    ",len);
    		else if((len%ans)==0) printf("%d
    ",0);
    		else printf("%d
    ",ans-(len%ans));	
    		//memset(s,0,sizeof(s));
    		memset(nxt,0,sizeof(nxt));
    		len=0;
    	}
    	//fclose(stdin);
    	return 0;
    }
    

    本题因为对smemset置零,WA了好几次,但至今都不知为何,求教

  • 相关阅读:
    HBase 操作
    HBase Java API 例子
    微信浏览器拖动出现黑色/白色背景、网址问题解决方案
    layui弹出层置顶弹出
    使用layui时,ajax执行后,重新渲染页面的方法
    宝塔更新
    js 播放音频文件 兼容火狐 谷歌浏览器
    SAP断点
    error_log 用法
    SE开头的事务代码
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/7942406.html
Copyright © 2020-2023  润新知