Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// sol OF
- #include<bits/stdc++.h>
- using namespace std;
- ifstream fin("flipc.in");
- ofstream fout("flipc.out");
- void solve1() {
- long long n, K;
- fin >> n >> K;
- long long v[n + 5], k(0);
- bool vl[n + 5];
- char a('X');
- for (long long i = 1; i <= n; i++) {
- char c;
- fin >> c;
- if (c != a)v[++k] = 1, vl[k] = (c == '1');
- else v[k]++;
- a = c;
- }
- long long s[k + 5];
- s[0] = 0;
- for (long long i = 1; i <= k; i++)s[i] = s[i - 1] + v[i];
- long long mx(0);
- for (long long i = 1; i + K - 1 <= k; i++) {
- if (vl[i] && i + K <= k)mx = max(mx, s[i + K] - s[i - 1]);
- else mx = max(mx, s[i + K - 1] - s[i - 1]);
- }
- fout << mx;
- }
- void solve2() {
- long long n, K;
- fin >> n >> K;
- long long v[n + 5], k(0);
- bool vl[n + 5];
- char a('X');
- for (long long i = 1; i <= n; i++) {
- char c;
- fin >> c;
- if (c != a)v[++k] = 1, vl[k] = (c == '1');
- else v[k]++;
- a = c;
- }
- long long nr(0);
- for (long long i = 1; i + K - 1 <= k; i++) {
- if (vl[i]) {
- if (i + K <= k) {
- nr += v[i] * v[i + K];
- }
- }
- else {
- if (K == 1)nr += (v[i] * (v[i] + 1)) / 2;
- else nr += v[i] * v[i + K - 1];
- }
- }
- fout << nr;
- }
- int main() {
- long long c;
- fin >> c;
- if (c == 1)solve1();
- else solve2();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement