专栏文章

题解:P9244 [蓝桥杯 2023 省 B] 子串简写

P9244题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioppl3w
此快照首次捕获于
2025/12/02 23:07
3 个月前
此快照最后确认于
2025/12/02 23:07
3 个月前
查看原文

P9244 题解

核心:

通过前缀和预处理出 c2c2 的数量,然后遍历字符串。如果遇到 c1c1 就把它之后 kk 个数和 nn(字符串长度)之间的 c2c2 的数量加到答案中去。

注意

一定要判断好边界条件!!!特别是用前缀和求 c1c1 之后 kk 个数和 nn 之间的 c2c2 数量的时候。
一定要开 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 条评论,欢迎与作者交流。

正在加载评论...