程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 3336

hdu 3336

編輯:C++入門知識

 


本來以為是KMP,後來想起以前看過的一片文章,只需要記錄滿足情況的此時位置的下一個的下標,然後下次比較就從從此進行比較了。

 

 

[cpp] #include"stdio.h"  
#include"string.h"  
int main() 

    int T; 
    int n; 
    int i,j,k,l,t; 
    int len,ans; 
    int a[200001]; 
    char s[200001]; 
    scanf("%d",&T); 
    while(T--) 
    { 
        scanf("%d",&n); 
        getchar(); 
        gets(s); 
        len=strlen(s); 
        for(i=0;i<len;i++) 
            a[i]=i; 
        j=len; 
        ans=0; 
        l=0; 
        t=1;//這裡的t初始化跟ans不同就ok  
        while(ans!=t) 
        { 
            t=ans; 
            k=0; 
            for(i=0;i<j&&l<len;i++) 
            { 
                if(s[a[i]]==s[l]&&a[i]<len) 
                { 
                    a[k++]=a[i]+1; 
                    ans++; 
                } 
            } 
            j=k; 
            l++; 
        } 
        printf("%d\n",ans%10007); 
    } 
    return 0; 

                     

#include"stdio.h"
#include"string.h"
int main()
{
 int T;
 int n;
 int i,j,k,l,t;
 int len,ans;
 int a[200001];
 char s[200001];
 scanf("%d",&T);
 while(T--)
 {
  scanf("%d",&n);
  getchar();
  gets(s);
  len=strlen(s);
  for(i=0;i<len;i++)
   a[i]=i;
  j=len;
  ans=0;
  l=0;
  t=1;//這裡的t初始化跟ans不同就ok
  while(ans!=t)
  {
   t=ans;
   k=0;
   for(i=0;i<j&&l<len;i++)
   {
    if(s[a[i]]==s[l]&&a[i]<len)
    {
     a[k++]=a[i]+1;
     ans++;
    }
   }
   j=k;
   l++;
  }
  printf("%d\n",ans%10007);
 }
 return 0;
}
     

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved