VOCARD - Trò chơi chọn bài
Tác giả: flashmt
Ngôn ngữ: C++
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 2000200;
int n, k, f, st[N], pos[N], tail, head, sum;
char card[N];
int main()
{
cin >> n >> k;
scanf("%s", card);
pos[0] = -1;
for (int i = 0; i < n; i++)
{
sum += card[i] - '0';
while (i - pos[head] > k) head++;
f = sum - st[head];
while (tail >= head && f <= st[tail]) tail--;
st[++tail] = f;
pos[tail] = i;
}
if (f * 2 == sum) puts("NO");
else
{
puts("YES");
cout << min(f, sum - f) << endl;
}
}