AT_abc452_d ABC452D No-Subsequence Substring
本文最后更新于15 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

AT_abc452_d [ABC452D] No-Subsequence Substring

题目描述

给定由小写英文字母组成的字符串 S 和 T。

求 S 的所有非空子串中,不包含 T 作为(不一定连续的)子序列的子串个数。

这里,S 的两个子串只要取出的位置不同,即使字符串内容相同也视为不同子串。

子串:字符串 X 的子串是指从 X 开头删除 0 个以上字符、从末尾删除 0 个以上字符后得到的字符串。

子序列:字符串 X 的子序列是指从 X 中删除 0 个以上元素后,剩余元素按原顺序排列得到的字符串。

输入格式

输入从标准输入以以下格式给出:

S T

输出格式

一行,输出答案。

输入输出样例 #1

输入 #1

abrakadabra
aba

输出 #1

51

输入输出样例 #2

输入 #2

aaaaa
a

输出 #2

0

输入输出样例 #3

输入 #3

rdddrdtdcdrrdcredctdordoeecrotet
dcre

输出 #3

263

说明/提示

样例解释 1

例如,S 的第 1 个字符到第 3 个字符组成的子串 abr 不包含 T 作为子序列。此外,k(仅 S 的第 5 个字符)和 akada(S 的第 4 个字符到第 8 个字符)等共 51 个子串满足条件。

注意:abr 既可以作为 S 的第 1 到 3 个字符的子串,也可以作为第 8 到 10 个字符的子串,但由于取出位置不同,它们被视为不同的子串进行计数。

样例解释 2

S 的所有非空子串都包含 T 作为子序列。因此没有满足条件的子串,输出 0。

数据范围

  • S 由小写英文字母组成
  • 记 |S| 为 S 的长度,满足$ 1 \le |S| \le 2 \times 10^5$
  • T 由小写英文字母组成
  • 记 |T| 为 T 的长度,满足$ 1 \le |T| \le 50$

代码

// Sunshine, sunshine, ladybugs awake!  
// Clap your hooves and do a little shake!  
#include <bits/stdc++.h>  
#define int long long  
#define endl '\n'  
using namespace std;  
  
using PII=pair<int,int> ;  
using PIC=pair<int,char> ;  
inline static constexpr int MAXN=200010;  
inline static constexpr int mod=676767677;  
  
void solve() {  
    string s,t;  
    cin>>s>>t;  
        int n=s.size(),m=t.size();  
        vector<array<int,26>> nxt(n+1);  
    nxt[n].fill(n);  
        for(int i=n-1;i>=0;i--){  
        nxt[i]=nxt[i+1];  
        nxt[i][s[i]-'a']=i;  
    }  
        int ans=0;  
    for(int L=0;L<n;L++){  
        int curr=L;  
        bool flag=true;  
                for(int j=0;j<m;j++){  
            if(curr==n){  
                flag=false;  
                break;  
            }  
                        curr=nxt[curr][t[j]-'a'];  
            if(curr==n){  
                flag=false;  
                break;  
            }  
            curr++;  
        }  
                if(flag){  
            ans+=(curr-1)-L;  
        }else{  
            ans+=n-L;  
        }  
    }  
    cout<<ans<<endl;  
}  
  
signed main() {     ios_base::sync_with_stdio(false);  
    cin.tie(NULL);  
    //int t;cin >> t;while (t--)         solve();  
    return 0;  
}
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇