您的位置:首页 > 其它

HDU 3336 输出包括从1到len长 字符串前缀的总个数(+DP)

2015-05-12 17:03 344 查看

Sample Input
1
4
abab

Sample Output
6
输出包括从1到len长 字符串前缀的总个数
abab:包括2个a,2个ab,1个aba,1个abab

 

# include <cstdio>
# include <cstring>
using namespace std;

char S[200010] ;
int next[200010] ;
int dp[200010] ;
int len ;

void getNext()
{
int j, k;
j = 0; k = -1; next[0] = -1;
while(j < len)
if(k == -1 || S[j] == S[k])
next[++j] = ++k;
else
k = next[k];
}

int main ()
{
int T ;
scanf("%d" , &T);
while (T--)
{
scanf("%d" , &len) ;
scanf("%s" , S) ;
getNext() ;
dp[0] = 0 ;
int ans = 0 ;
int i ;
for (i = 1 ; i<= len ; i++)
{
dp[i] = dp[next[i]] + 1 ;
dp[i] %= 10007 ;
ans += dp[i] ;
ans %= 10007 ;
}
printf("%d\n" , ans) ;

}

return 0 ;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐