首页 > 其他分享 >NOIP2015Day2T2-子串

NOIP2015Day2T2-子串

时间:2022-11-22 18:36:48浏览次数:56  
标签:子串 do NOIP2015Day2T2 mo substring ans 字符串 now


2.子串

(substring.cpp/c/pas)

【问题描述】

有两个仅包含小写英文字母的字符串A 和B 。现在要从字符串A 中取出k 个互不重叠的非空子串,然后把这k 个子串按照其在字符串A 中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得这个新串与字符串B 相等?注意:子串取出的位置不同也认为是不同的方案。

【输入格式】

输入文件名为substring.in 。

第一行是三个正整数n ,m ,k ,分别表示字符串A 的长度,字符串B 的长度,以及问题描述中所提到的k ,每两个整数之间用一个空格隔开。

第二行包含一个长度为n 的字符串,表示字符串A 。

第三行包含一个长度为m 的字符串,表示字符串B 。

【输出格式】

输出文件名为substring.out 。

输出共一行,包含一个整数,表示所求方案数。由于答案可能很大,所以这里要求输出答案对1,000,000,007取模的结果。

NOIP2015Day2T2-子串_T2

NOIP2015Day2T2-子串_T2_02

NOIP2015Day2T2-子串_提高组_03

【输入输出样例3】

见选手目录下substring/substring1.in与substring/substring1.ans。 见选手目录下substring/substring3.in与substring/substring3.ans。

一看到这题,就想到了DP。很明显可以看到三维的dp状态,dp[i,j,k],表示A串到i位置,B串到j位置,已经用了k个串的方案数。


var 
mo,n,m,k,i,j,p,now,pre,s:longint;ans:int64;a,b:ansistring;
f:array[0..1,0..1000,0..1000]of longint;
begin
mo:=1000000007;
readln(n,m,k);
readln(a);
readln(b);
for i:=1 to n do if a[i]=b[1] then f[0,i,1]:=1;
for p:=2 to m do
begin
pre:=1-now;
for j:=1 to k do
begin
s:=0;
for i:=1 to n do
begin
s:=(s+f[now,i-1,j-1])mod mo;
if a[i]=b[p] then f[pre,i,j]:=(f[now,i-1,j]+s)mod mo
else f[pre,i,j]:=0;
end;
end;
now:=pre;
end;
for i:=1 to n do ans:=(ans+f[now,i,k])mod mo;
writeln(ans);
end.

标签:子串,do,NOIP2015Day2T2,mo,substring,ans,字符串,now
From: https://blog.51cto.com/u_15888102/5878315

相关文章

  • 【原创】演示判断一个字符串是否为另一字符串的子串的函数的汇编源程序
    ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;功能:演示判断一个字符串是否为另一字符串的子串的函数;作者:黄志斌于广西河池;日 ......
  • C语言:连续子串
    题目输入一个字符串,输出其所有的子串(不包含本身,输出每个子串间有空格)。子串:对于一个字符串变量,例如"adereegfbw",它的子串就是像"ader"这样可以从中找到的连续的字符......
  • 3. 无重复字符的最长子串 ---- 滑动窗口、无序集合存放比较
    给定一个字符串s,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3......
  • 【数据结构/C语言】从s中删除所有和串t相同的子串,并返回删除的次数
    编写算法Delete_SubString(Stringtype&s,Stringtypet),要求从s中删除所有和串t相同的子串,并返回删除的次数。(要求利用五种基本操作:串赋值StrAssign,串比较StrCompare,求......
  • C++中sort函数、1.4最长公共子串
    sort()即为用来排序的函数,它根据具体情况使用不同的排序方法,效率较高。sort在实现时避免了经典快速排序中可能出现的会导致实际复杂度退化到O(n2)的极端情况。使用sort()......
  • leetcode 3. 无重复字符的最长子串
    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度......
  • leetcode 5. 最长回文子串
    给你一个字符串 s,找到 s 中最长的回文子串。 示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb" 提示:1<......
  • leetcode 647. 回文子串 js实现
    给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。......
  • 子数组、子序列,子串、子序列,子段的简单区别
    关系图表数组中的子数组、子序列,子段以及字符串的子串、子序列解释类型名称连续性数组子数组连续子段连续子序列不一定连续字符串子串连续子......
  • 力扣-647-回文子串
    因为单字符也算是回文,所以至少有n个然后感觉又是二维dp感觉很像回溯解决排列组合问题感觉难点在于还要判断是不是回文,虽然可以借助栈,但是每次都压栈弹栈肯定复杂度太大......