#include<iostream> #include<vector> #include<math.h> using namespace std; int a[8003]; int spot[8003], zdal[8003], woln[8003]; int main() { int n, k, t; scanf("%d%d%d", &n, &k, &t); char c; scanf("\n"); for(int i=1; i<=n; i++){ scanf("%c", &c); a[i]=c-48; spot[i]=spot[i-1]; zdal[i]=zdal[i-1]; woln[i]=woln[i-1]; if(a[i]==1) spot[i]++; if(a[i]==2) zdal[i]++; if(a[i]==3) woln[i]++; } int wyn=-1; for(int i=1; i<=n-2*t; i++){ for(int j=i+t+1; j<=n-t+1; j++){ int p1; //wolne w domu p1=woln[i-1]+woln[n]-woln[j+t-1]; int p2; //stacjonarne kiedy w domu p2=spot[i-1]+spot[n]-spot[j+t-1]; int p3; //stacjonarne kiedy w trasie p3=spot[i+t-1]-spot[i-1]+spot[j+t-1]-spot[j-1]; int p4; //zdalne kiedy w trasie p4=zdal[i+t-1]-zdal[i-1]+zdal[j+t-1]-zdal[j-1]; int p5; //zdalne kiedy w domu p5=zdal[i-1]+zdal[n]-zdal[j+t-1]; if(p2+p3+p4>k) continue; else{ int p6=min(k-(p2+p3+p4), p5); wyn=max(wyn, p1+p6+p2); } } } if(spot[n]<=k){ int p7=min(k-spot[n], zdal[n]); wyn=max(wyn, p7+woln[n]+spot[n]); } printf("%d\n", wyn); 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 | #include<iostream> #include<vector> #include<math.h> using namespace std; int a[8003]; int spot[8003], zdal[8003], woln[8003]; int main() { int n, k, t; scanf("%d%d%d", &n, &k, &t); char c; scanf("\n"); for(int i=1; i<=n; i++){ scanf("%c", &c); a[i]=c-48; spot[i]=spot[i-1]; zdal[i]=zdal[i-1]; woln[i]=woln[i-1]; if(a[i]==1) spot[i]++; if(a[i]==2) zdal[i]++; if(a[i]==3) woln[i]++; } int wyn=-1; for(int i=1; i<=n-2*t; i++){ for(int j=i+t+1; j<=n-t+1; j++){ int p1; //wolne w domu p1=woln[i-1]+woln[n]-woln[j+t-1]; int p2; //stacjonarne kiedy w domu p2=spot[i-1]+spot[n]-spot[j+t-1]; int p3; //stacjonarne kiedy w trasie p3=spot[i+t-1]-spot[i-1]+spot[j+t-1]-spot[j-1]; int p4; //zdalne kiedy w trasie p4=zdal[i+t-1]-zdal[i-1]+zdal[j+t-1]-zdal[j-1]; int p5; //zdalne kiedy w domu p5=zdal[i-1]+zdal[n]-zdal[j+t-1]; if(p2+p3+p4>k) continue; else{ int p6=min(k-(p2+p3+p4), p5); wyn=max(wyn, p1+p6+p2); } } } if(spot[n]<=k){ int p7=min(k-spot[n], zdal[n]); wyn=max(wyn, p7+woln[n]+spot[n]); } printf("%d\n", wyn); return 0; } |