资格赛 Problem D

Problem D: String

 

Description

 

给定一个字符串S[1..n]和一个整数T,现在需要在字符串S中找出长度不小于T的一个子串,使得其在原串中不重叠出现的次数最多,求这个次数。

Input

 

第一行:一个整数T(T > 1)

第二行:一个字符串S,且仅包含小写字母,字符串长度不超过10000

 

Output

 

一个整数。代表出现最多的次数

如果没有满足条件的解则输出0

 

Sample Input

2

ababab

 

Sample Output

3

类似最大重复子串,可以用后缀数组+贪心或者后缀树。由于这题数据量比较小,直接枚举。
#include <iostream>

const int N = 10001;
int t,len;
char str[N];

int query(int from,int to){
    
int i=0,j,k,ans=0;
    
while(i<len){
        
for(j=i,k=from;j<len && k<=to;j++,k++)
            
if(str[j]!=str[k])
                
break;
        
if(k>to)
            ans
++,i=j;
        
else
            i
++;
    }

    
return ans;
}

int solve(){
    
int i,j,ans=0,n;
    
if(t>len) return 0;
    
for(i=0,j=t-1;j<len;i++,j++)
        
if((n=query(i,j))>ans) 
            ans
=n;
    
return (ans==1)? 0:ans;
}

int main(){
    
while(scanf("%d",&t)!=EOF){
        scanf(
"%s",str);
        len
=strlen(str);
        printf(
"%d\n",solve());
    }

    
return 0;
}

posted on 2009-05-10 18:59 极限定律 阅读(661) 评论(0)  编辑 收藏 引用 所属分类: 腾讯2009程序设计大赛


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

常用链接

留言簿(10)

随笔分类

随笔档案

友情链接

搜索

最新评论

阅读排行榜

评论排行榜