題目連結:
Subsequences in Substrings
Kattis - subsequencesinsubstrings
題目大意:給你字串s和t。然後讓你在s的所有連續子串中,找出這些連續子串中的非連續子串中包含t的有多少個。
具體思路:我們列舉s的每一個位置,然後判斷一下s的包含t的非連續子串中到達那個位置,然後這個字串兩邊的長度相乘就是當前位置開始,滿足條件的字元位置。然後我們在找從上一次找到首字母位置下一個開始, 繼續往下找就可以了。
AC程式碼:
#include<bits/stdc++.h>
using namespace std;
# define ll long long
const int maxn = 4e5+;
int main()
{
ios::sync_with_stdio(false);
string s,t;
cin>>s>>t;
ll len1=s.size();
ll len2=t.size();
ll ans=;
ll pos=-;
while()
{
int st,ed;
st=s.find(t[],pos+);
if(st==-)break;
ed=st;
for(int i=;i<len2;i++){
ed=s.find(t[i],ed+);
if(ed==-)break;
}
if(ed==-)break;
ans+=(st-pos)*(len1-ed);
pos=st;
}
printf("%lld\n",ans);
}