- P197's solution
-
P197's Solution
- @ 2025-9-7 12:13:51
对于任意两块相距不超过 的年糕,无论先吃哪块,都会在另一块年糕上蹭下 单位辣椒酱。
也就是说,最终蹭下辣椒酱的量与吃法无关,恒等于相距不超过 的年糕对数。
直接前缀和统计相距不超过 的年糕对数即可。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 12;
char s[N];
int pre[N];
int n;
int k;
int main()
{
freopen("ricecake.in", "r", stdin);
freopen("ricecake.out", "w", stdout);
int T;
scanf("%d", &T);
while (T--)
{
scanf("%d %d %s", &n, &k, s + 1);
for (int i = 1; i <= n; i++)
pre[i] = pre[i - 1] + s[i] - '0';
long long ans = 0;
for (int i = 1; i <= n; i++)
if (s[i] == '1')
{
int i1 = min(i + k, n);
int i2 = max(i - k - 1, 0);
ans += pre[i1] - pre[i2] - 1;
}
cout << ans / 2 << endl;
}
return 0;
}