zoukankan      html  css  js  c++  java
  • 「LOJ#10045」「一本通 2.2 练习 1」Radio Transmission (KMP

    题目描述

    原题来自:BalticOI 2009

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

    输入格式

    第一行给出字符串的长度 L,第二行给出一个字符串,全由小写字母组成。

    输出格式

    输出最短的长度。

    样例

    样例输入 1

    8
    cabcabca

    样例输出 1

    3

    样例说明

    对于样例,我们可以利用 abc 不断自我连接得到 abcabcabc,读入的 cabcabca 是它的子串。

    数据范围与提示

    对于全部数据,1≤L≤10^6。

    题解

    Power-Strings的弱化版。

    最小循环节直接就是$n-nxt[n]$,然后注意下边界,除一下就行了。

     1 编号     题目     状态     分数     总时间     内存     代码 / 答案文件     提交者     提交时间
     2 #228004     #10045. 「一本通 2.2 练习 1」Radio Transmission    Accepted     100     103 ms     5232 KiB     C++ / 385 B     qwerta     2018-10-14 10:14:56
     3 
     4 #include<cstdio>
     5 #include<iostream>
     6 using namespace std;
     7 string s;
     8 int nxt[1000003];
     9 int main()
    10 {
    11     //freopen("a.in","r",stdin);
    12     int n;
    13     cin>>n;
    14     cin>>s;
    15     int k=-1;
    16     nxt[0]=-1;
    17     for(int i=1;i<n;++i)
    18     {
    19         while(k!=-1&&s[i]!=s[k+1])k=nxt[k];
    20         if(s[i]==s[k+1])k++;
    21         nxt[i]=k;
    22     }
    23     cout<<n-(nxt[n-1]+1);
    24     return 0;
    25 }
  • 相关阅读:
    编码以及⼩知识点补充
    基本数据类型(dict)
    基本数据类型(list,tuple)
    python基础
    Eclipse使用技巧
    条件与(&&)和逻辑与(&)以及条件或(||)和逻辑或(|)区别
    到底怎么样才叫看书?——Tony Zhao's
    Jsp servlet 值传递。。
    (06)odoo报表
    (05)odoo数据库和业务操作
  • 原文地址:https://www.cnblogs.com/qwerta/p/9813469.html
Copyright © 2011-2022 走看看