#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<db> vdb;
typedef vector<pii> vii;
typedef vector<pll> vll;
#define st first
#define nd second
#define sz(x) ((int)x.size())
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define BOOST ios_base::sync_with_stdio(0);cin.tie(0);
#define FOR(i,j,k) for(auto i = (j); i<(k); i++)
//djjjbbbbbbjjjddd
int main()
{
BOOST;
int n,k,t;
cin>>n>>k>>t;
string V;
cin>>V;
int wynik = -1;
//jeśli nie jedzie do pracy
{
int on = 0;
int off = 0;
int wolne = 0;
for (int k = 0; k < n; k++) {
if (V[k]=='1')
off++;
if (V[k]=='2')
on++;
if (V[k]=='3')
wolne++;
}
int k2 = k - off;
if (k2 >= 0)
wynik = max(wynik, wolne + off + min(k2, on));
}
for (int i = 0; i <= n - 2 * t; i++) {
// i - moment wyjazdu z domu
// Bajtazar jest w biurze w momencie i + t
int off_dom = 0;
int on_dom = 0;
int wolne_dom = 0;
int spotkania_jazda = 0;
// ustawienie początkowe zmiennych
for (int k = 0; k < i; k++) {
if (V[k] == '1')
off_dom++;
else if (V[k] == '2')
on_dom++;
else
wolne_dom++;
}
for (int k = i; k < i + 2 * t; k++) {
if (V[k] != '3')
spotkania_jazda++;
}
for (int k = i + 2 * t; k < n; k++) {
if (V[k] == '1')
off_dom++;
else if (V[k] == '2')
on_dom++;
else if (V[k] == '3')
wolne_dom++;
}
for (int j = i + t; j <= n - t; j++) {
// j - moment wyjazdu z biura
// Bajtazar jest w domu w momencie j + t
int k2 = k - spotkania_jazda - off_dom;
if (k2 >= 0)
wynik = max(wynik, wolne_dom + off_dom + min(k2, on_dom));
if (j != n - t) {
//przesunięcie zmiennych
//dddjjjbbb j jj d dd
//dddjjjbbb b jj j dd
if (V[j] != '3')
spotkania_jazda--;
if (V[j + t] == '1') {
spotkania_jazda++;
off_dom--;
}
else if (V[j + t] == '2') {
spotkania_jazda++;
on_dom--;
}
else if (V[j + t] == '3') {
wolne_dom--;
}
}
}
}
cout<<wynik;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double db; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef vector<int> vi; typedef vector<ll> vl; typedef vector<db> vdb; typedef vector<pii> vii; typedef vector<pll> vll; #define st first #define nd second #define sz(x) ((int)x.size()) #define all(x) (x).begin(),(x).end() #define pb push_back #define BOOST ios_base::sync_with_stdio(0);cin.tie(0); #define FOR(i,j,k) for(auto i = (j); i<(k); i++) //djjjbbbbbbjjjddd int main() { BOOST; int n,k,t; cin>>n>>k>>t; string V; cin>>V; int wynik = -1; //jeśli nie jedzie do pracy { int on = 0; int off = 0; int wolne = 0; for (int k = 0; k < n; k++) { if (V[k]=='1') off++; if (V[k]=='2') on++; if (V[k]=='3') wolne++; } int k2 = k - off; if (k2 >= 0) wynik = max(wynik, wolne + off + min(k2, on)); } for (int i = 0; i <= n - 2 * t; i++) { // i - moment wyjazdu z domu // Bajtazar jest w biurze w momencie i + t int off_dom = 0; int on_dom = 0; int wolne_dom = 0; int spotkania_jazda = 0; // ustawienie początkowe zmiennych for (int k = 0; k < i; k++) { if (V[k] == '1') off_dom++; else if (V[k] == '2') on_dom++; else wolne_dom++; } for (int k = i; k < i + 2 * t; k++) { if (V[k] != '3') spotkania_jazda++; } for (int k = i + 2 * t; k < n; k++) { if (V[k] == '1') off_dom++; else if (V[k] == '2') on_dom++; else if (V[k] == '3') wolne_dom++; } for (int j = i + t; j <= n - t; j++) { // j - moment wyjazdu z biura // Bajtazar jest w domu w momencie j + t int k2 = k - spotkania_jazda - off_dom; if (k2 >= 0) wynik = max(wynik, wolne_dom + off_dom + min(k2, on_dom)); if (j != n - t) { //przesunięcie zmiennych //dddjjjbbb j jj d dd //dddjjjbbb b jj j dd if (V[j] != '3') spotkania_jazda--; if (V[j + t] == '1') { spotkania_jazda++; off_dom--; } else if (V[j + t] == '2') { spotkania_jazda++; on_dom--; } else if (V[j + t] == '3') { wolne_dom--; } } } } cout<<wynik; } |
English