#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=8000;
char arr[MAXN+5];
int prefD[MAXN+5]; //w domu
int prefBD[MAXN+5]; //w biurze lub w domu
int qryD(int l, int r)
{
return prefD[r]-prefD[l-1];
}
int qryBD(int l, int r)
{
return prefBD[r]-prefBD[l-1];
}
void solve()
{
int n,k,t;
cin >> n >> k >> t;
int wszystkie_spotkania=0;
for(int i=1;i<=n;i++){
cin >> arr[i];
if(arr[i]!='3') wszystkie_spotkania++;
prefBD[i]=prefBD[i-1];
prefD[i]=prefD[i-1];
if(arr[i]=='1' || arr[i]=='2') prefBD[i]++;
if(arr[i]=='2') prefD[i]++;
}
int ans=-1;
int p=max(0,wszystkie_spotkania-k); //na ilu musi byc
//nie jedzie w ogole
if(qryD(1, n) >= p){
ans=max(ans,n-p);
}
// jedzie na jakis przedzial
for(int i=t+1;i<=n;i++){
for(int j=i;j<=n-t;j++){
int x=i-t-1;
int y=j+t+1;
if(qryBD(i, j) + qryD(1, x) + qryD(y, n) >= p){
int dl = x + (n-y+1);
int q = max(0, p-qryBD(i,j));
ans=max(ans,dl-q);
}
}
}
cout << ans;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=8000; char arr[MAXN+5]; int prefD[MAXN+5]; //w domu int prefBD[MAXN+5]; //w biurze lub w domu int qryD(int l, int r) { return prefD[r]-prefD[l-1]; } int qryBD(int l, int r) { return prefBD[r]-prefBD[l-1]; } void solve() { int n,k,t; cin >> n >> k >> t; int wszystkie_spotkania=0; for(int i=1;i<=n;i++){ cin >> arr[i]; if(arr[i]!='3') wszystkie_spotkania++; prefBD[i]=prefBD[i-1]; prefD[i]=prefD[i-1]; if(arr[i]=='1' || arr[i]=='2') prefBD[i]++; if(arr[i]=='2') prefD[i]++; } int ans=-1; int p=max(0,wszystkie_spotkania-k); //na ilu musi byc //nie jedzie w ogole if(qryD(1, n) >= p){ ans=max(ans,n-p); } // jedzie na jakis przedzial for(int i=t+1;i<=n;i++){ for(int j=i;j<=n-t;j++){ int x=i-t-1; int y=j+t+1; if(qryBD(i, j) + qryD(1, x) + qryD(y, n) >= p){ int dl = x + (n-y+1); int q = max(0, p-qryBD(i,j)); ans=max(ans,dl-q); } } } cout << ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; } |
English