DUToj1220: Minitrue volunteer(DP kmp)

1220: Minitrue volunteer

Time Limit:10000/8000 MS (Java/Others)   Memory Limit:163840/131072 KB (Java/Others)
Total Submissions:18   Accepted:2

[Submit][Status][Discuss]

Description

净化网络环境是每一个新时代青年心中之所想。作为一个新时代的六有大学生,小P十分希望网络中没有任何一点点点点点不符合社会主义核心价值观的肮脏文字。因此,他决定自愿加入净化网络空间的队伍。现在他知道了一段新的违规文本,这个文本中全部是小写字母和数字。他想知道所有长为n的只有小写字母和数字的字符串中,对于不同的结尾字符(即'a'~'z','0'~'9'),分别有多少不包含这一段违规文本,以便他对自己要举报多少违规内容先有个B数(不然他的手都要累断了)。因为他还要去学习十九大精神等重要内容,没有时间了,所以现在他拜托你来帮他搞定这个问题。

字符串A不包含字符串B,定义为“B不是A的连续子串”。

 

本题数据组数:8

Input

第一行一个字符串(长度 ≤1000)≤1000),只包含小写字母和数字,表示违规文本。

第二行一个正整数n(n≤1000)n(n≤1000),含义见题面。

Output

 36行每行一个正整数,表示以某个字母结尾的可能的不含违规文本的串的数目。这个字母第1-26行为'a'~'z',之后10行为'0'~'9'。

鉴于答案可能很大,所有的答案请对109+7109+7取模。

Sample Input

tamsm
5

Sample Output

1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679615
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616
1679616

HINT

 

 为了实现中华民族伟大复兴的中国梦而奋斗!——这是小P走之前留给你的话。

 

Source

Zeratul

[Submit][Status][Web Board]

题意:

有一个只包含小写字母和数字的字符串A(长度<=1000)。问以每一种字母或数字

为结尾且不包含字符串A的长度为n的字符串B有多少种。

解法:

dp[i][j]表示字符串前i个字符中后缀和目标字符串前缀有J个匹配且不含目标字符串的字符ge, 个数x[i][j]表示目标串前i个字符加上第j个字母('a'+j)后与目标串匹配的长度;

如果结尾字符和A结尾字符不同 ans=dp[n-1][0]+dp[n-1][1]+……+dp[n-1][m-1]; 相同就只加到m-2.

学校oj好像又出问题了0.0这题也过不了(标程能过,但是标程好像   asdasd  6   这个样例是错的)

代码:

#include
using namespace std;
typedef long long LL;
const int N = 1100;
const LL mod= 1e9+7;
char str[N];
LL dp[N][N], nex[N][N];
char str2[N]="abcdefghijklmnopqrstuvwxyz0123456789";
 
int main()
{
    int n, m;scanf("%s", str);
    scanf("%d", &n);
        string str1=str;
        m=str1.length(); 
        memset(dp,0,sizeof(dp));
        memset(nex,0,sizeof(nex));
        dp[0][0]=1;
        for(int i=0;i

 

你可能感兴趣的:(DP,ACM)