zoukankan      html  css  js  c++  java
  • FZU 1901

    运用KMP算法解决的一道题,求一下Next数组,然后直接找最后一个元素的next值,依次找下标为next的元素,直接用总数减去next值就是要求的一个数,直到找到next的值为0的时候结束!

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int a[1000010];
    char s[1000010];
    int next[1000010];
    int m;
    
    void getNext(){
        int j,k;
        next[0]=-1;
        j=0;k=-1;
        while(j<m)
        {
            if(k==-1||s[j]==s[k])
            {
                j++;
                k++;
                next[j]=k;
            }
            else
                k=next[k];
        }
    }
    
    int main()
    {
        int n,count = 0;
        cin >> n;
        while(n--)
        {
            count++;
            int flag = 0,sum = 0;
            cin>>s;
            m = strlen(s);
            /*for(int i =0;i <=1000002;i++)
            {
                next[i]   = 0;
                a[i] = 0;
            }*/
            getNext();
            int t=next[m];
            //cout<< t;
            while(t)
            {
                a[sum++] = m-t;
                t =next[t];
            }
            a[sum++]= m;
            cout<< "Case #"<< count << ": " ;
            cout<< sum<< endl;
            for(int i =0;i < sum;i++)
            cout<< a[i]<< " ";
            cout<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    九月二十日
    九月十九日
    九月十八日
    九月十七日
    九月十六日
    大三第一周学习后的感悟及本学期计划
    阅读笔记09梦断代码
    阅读笔记08-梦断代码
    对搜狗现如今的用法进行评述
    寻找水王
  • 原文地址:https://www.cnblogs.com/DUANZ/p/3872938.html
Copyright © 2011-2022 走看看