题解:B4560 [合肥市小学组 2024 T2] 买花
wangxy0311 · · 题解
题目传送门
思路
这题
代码
:::success[AC Code]
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(x, y, z) for (int x = (y); x <= (z); ++x)
#define per(x, y, z) for (int x = (y); x >= (z); --x)
inline void fast_io() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); }
const int N = 1e5 + 5;
string s;
int n, k;
int pre[26][N]; //前缀和数组
int main() {
fast_io(); //快读,如果不加容易TLE。建议加上
cin >> n >> k >> s;
rep(i, 1, n) {
rep(c, 0, 25)
pre[c][i] = pre[c][i - 1]; //前缀和预处理
pre[s[i - 1] - 'a'][i]++;
}
int ans = 0;
rep(l, 1, n) {
for (int j = 1; l + j * k - 1 <= n; j++) { //内层字符种类循环
int r = l + j * k - 1; //计算右端点
int cnt = 0;
rep(c, 0, 25) {
if (pre[c][r] - pre[c][l - 1] == k) cnt++;
}
if (cnt == j) ans++; //满足条件答案就加一
}
}
cout << ans;
return 0;
}
::: 写题解属实不易,点个赞再走吧!