SGU 506.Subsequences Of Substrings

求一个串S有多少子串subS满足s是subS的子序列.len(S)<=100000, len(s)<=100

直接扫一遍...

--------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
 
using namespace std;
 
typedef long long ll;
 
const int maxn = 109;
 
char S[100009], s[maxn];
int Sn, sn, cnt[maxn], p;
ll ans;
 
int main() {
scanf("%s%s", S, s);
Sn = strlen(S);
sn = strlen(s);
p = 0; ans = 0;
memset(cnt, 0, sizeof cnt);
for(int i = 0; i < Sn; i++) {
for(int j = sn; j-- > 1; )
if(S[i] == s[j]) cnt[j] = max(cnt[j], cnt[j - 1]);
if(s[0] == S[i]) cnt[0] = i + 1;
if(s[sn - 1] == S[i])
ans += (ll) (cnt[sn - 1] - p) * (Sn - i), p = cnt[sn - 1];
}
printf("%lld\n", ans);
return 0;
}

-------------------------------------------------------------------- 

506. Subsequences Of Substrings
Time limit per test: 0.5 second(s)
Memory limit: 262144 kilobytes
input: standard
output: standard

Andrew has just made a breakthrough in steganography: he realized that one can hide a message in a bigger text by making the message a subsequence of the text. We remind that a string s  is called a  subsequence  of string  t  if one can remove some (possibly none) letters from  t  and obtain  s . Andrew has prepared a text (represented by a string) with a hidden message (represented by another string which is a subsequence of the first string). But it turns out that he doesn't have enough space to write the text, so he wonders if he can remove some letters from the beginning and/or the end of his text in such a way that the hidden message still stays a subsequence of it. You should find out how many ways are there to remove some (possibly none) letters from the beginning of the given text and some (possibly none) letters from the end of the given text in such a way that the given message is a subsequence of the remaining string. Two ways are distinct if the number of letters removed from the beginning or from the end or both are distinct, even if the resulting string is the same. 
Input
The first line of the input file contains the text — a non-empty string of lowercase English letters, no more than   letters long. The second line of the input file contains the message — a non-empty string of lowercase English letters, no more than 100 letters long. It is guaranteed that the message is a subsequence of the given text. 
Output
Output one integer — the sought number of ways. 
Example(s)
sample input
sample output
abraaadabraa baa 
23 

 

转载于:https://www.cnblogs.com/JSZX11556/p/5049346.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值