专栏文章
题解:P9244 [蓝桥杯 2023 省 B] 子串简写
P9244题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioppl3w
- 此快照首次捕获于
- 2025/12/02 23:07 3 个月前
- 此快照最后确认于
- 2025/12/02 23:07 3 个月前
P9244 题解
核心:
通过前缀和预处理出 的数量,然后遍历字符串。如果遇到 就把它之后 个数和 (字符串长度)之间的 的数量加到答案中去。
注意
一定要判断好边界条件!!!特别是用前缀和求 之后 个数和 之间的 数量的时候。
一定要开 long long!!!
代码如下:
CPP#include <bits/stdc++.h>
using namespace std;
long long k;
string s;
char l, r;
long long sumb[500010];
int main(){
cin >> k;
cin >> s >> l >> r;
long long n = s.size();
for (int i = 0; i < n; i++){
if (s[i] == r) sumb[i + 1] = sumb[i] + 1;
else sumb[i + 1] = sumb[i];
}
long long ans = 0;
for (int i = 1; i <= n - k + 1; i++){
if (s[i - 1] == l){
if (i + k - 1 <= n){
ans += sumb[n] - sumb[i + k - 2];
}
}
}
cout << ans;
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...