emmm 小信反转串给个正确思路呗

球思路~~
题面:

题目链接

智灵普及小班2前缀和差分 - 信友队

自己向下翻可以找到题解的

我编过了,55分

就是这个:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll maxsum;
ll n, k;
string s;
ll cnt;
ll a[100005], sum[100005];
int main() {
	cin >> n >> k >> s;
    ll i;
    int f=0;
	for (i = 0; i < n; i++) {
		if (s[i] == '1') {
			int t1 = 0;
			while (i < n && s[i] == '1') {
				i++;
				t1++;
			}
			i--;
			a[++cnt] = t1;
		} else {
			int t2 = 0;
			while (i < n && s[i] == '0') {
				i++;
				t2++;
			}
			i--;
			a[++cnt] = t2;
		}
	}
	for (ll i = 1; i <= cnt; i++) {
		sum[i] = sum[i - 1] + a[i];
	}
	for (ll i = 2 * k + 1; i <= cnt; i += 2) {
		maxsum = max(sum[i] - sum[i - 2 * k - 1], maxsum);
	}
	cout << maxsum;
	return 0;
}

@览遍千秋 你在吗?

@栗子酱 @杨思越 @我命由我不由天 @2345安全卫士 有大佬在吗???

文字版题目发一下,我发我同学看看

2 个赞

题目描述
小信有一个长度为 n的只含 0 和 1 的字符串 s
。 他可以进行最多 k 次如下操作:
选择字符串 s 的一个子串,将其中的字符反转(0 变成 1,1 变成 0)。
求在操作过程中(操作数可为 0 )出现过的最长的连续的 1 的长度。
输入格式:
第一行 2 个正整数 n,k;
第二行一个字符串 s。
输出格式:
输出不超过 k 次操作后,最长的连续的 1 的长度。

emmm,大概瞪出来了
就是维护两个指针(l,r),窗口内最多有k个0
不断扩张右边界r,当0的数量大于k时,移动左边界
维护一个cnt记录窗口内0的个数
记录窗口的最大长度
然后我就不细说了

2 个赞

干哈