zoukankan      html  css  js  c++  java
  • poj1961Period(next数组)

    http://poj.org/problem?id=1961

    对于next数组只能说略懂,其中精髓还是未完全领会

    大体是本串相同前缀与后缀的最大长度,读不懂?看串abcdab 这里所说前缀与后缀都为ab

    这题核心就一句话if((i+1)%(i-next[i])==0) 输出

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<queue>
     8 #include<vector>
     9 using namespace std;
    10 #define INF 0xfffffff
    11 #define N 1000010
    12 char s[N];
    13 int next[N];
    14 void kmp(int k)
    15 {
    16     int i,j=-1;
    17     next[0] = -1;
    18     for(i = 1 ; i < k ; i++)
    19     {
    20         while(j>-1&&s[i]!=s[j+1])
    21         j = next[j];
    22         if(s[i]==s[j+1])
    23         j++;
    24         next[i] = j;
    25     }
    26 }
    27 int main()
    28 {
    29     int n,i;
    30     int kk=1;
    31     while(scanf("%d%*c",&n)!=EOF)
    32     {
    33         if(!n) break;
    34         memset(next,0,sizeof(next));
    35         for(i = 0 ; i < n ; i++)
    36         scanf("%c",&s[i]);
    37         kmp(n);
    38         printf("Test case #%d
    ",kk++);
    39         for(i = 0 ;i < n ; i++)
    40         if(next[i]!=-1&&(i+1)%(i-next[i])==0)
    41         {
    42             printf("%d %d
    ",i+1,(i+1)/(i-next[i]));
    43         }
    44         puts("");
    45     }
    46     return 0;
    47 }
    View Code
  • 相关阅读:
    oracle学习笔记(十五) PL/SQL语法结构以及使用
    Jquery1
    DOM2
    DOM
    JS的使用
    登录
    数据库操作是sql的操作1
    数据库2_sqlHelper
    数据库1数据库常用指令
    C# 基础
  • 原文地址:https://www.cnblogs.com/shangyu/p/3524572.html
Copyright © 2011-2022 走看看