4960. 子串简写
作者:
logos--
,
2023-08-03 11:45:50
,
所有人可见
,
阅读 114
#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int N = 57, M = 11;
constexpr int inf = 1E18, mod = 1e9 + 7;
inline void Main() {
int n; cin >> n;
string s; char st, ed;
cin >> s >> st >> ed;
vector<int> pre, suf;
int len = s.size();
for (int i = 0; i < len; i ++) {
if(s[i] == st) pre.push_back(i);
if(s[i] == ed) suf.push_back(i);
}
len = pre.size();
int ans = 0;
for (int i = 0; i < len; i ++) {
int x = pre[i];
int d = x + n - 1;
int l = 0, r = suf.size() - 1;
while(l < r) {
int mid = l + r >> 1;
if(suf[mid] >= d) r = mid;
else l = mid + 1;
}
if(suf[r] >= d) ans += (suf.size() - r);
}
cout << ans << '\n';
}
signed main() {
cin.tie(nullptr)->sync_with_stdio(false);
int T = 1;
while(T --) Main();
return 0;
}