zoukankan      html  css  js  c++  java
  • [BZOJ1355][Baltic2009]Radio Transmission

    [BZOJ1355][Baltic2009]Radio Transmission

    试题描述

    给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.

    输入

    第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组成.

    输出

    输出最短的长度

    输入示例

    8
    cabcabca

    输出示例

    3

    数据规模及约定

    见“输入

    题解

    就是找到最大的 boarder,然后用总长度减去它的长度就是最小周期。

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cctype>
    #include <algorithm>
    using namespace std;
    
    int read() {
    	int x = 0, f = 1; char c = getchar();
    	while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
    	while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
    	return x * f;
    }
    
    #define maxn 1000010
    char S[maxn];
    int Fail[maxn];
    
    int main() {
    	int n = read();
    	scanf("%s", S + 1);
    	
    	for(int i = 2; i <= n + 1; i++) {
    		int j = Fail[i-1];
    		while(j > 1 && S[j] != S[i-1]) j = Fail[j];
    		Fail[i] = S[j] == S[i-1] ? j + 1 : 1;
    	}
    	
    	printf("%d
    ", n + 1 - Fail[n+1]);
    	
    	return 0;
    }
    
  • 相关阅读:
    7.1 深搜子集和问题 (枚举子集+剪枝)
    javascript的运算符
    javascript中的数据类型Null
    其他进制数字转换
    javascript数据类型转换number
    javascript强制数据类型转换String
    自增自减
    一元运算符
    javascript中的数据类型boolean
    自增自减的练习
  • 原文地址:https://www.cnblogs.com/xiao-ju-ruo-xjr/p/6482369.html
Copyright © 2011-2022 走看看