#include <stdio.h>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main(void){
int n, k, t;
int count = 0, contest = 0, max_contest = -1;
int remaining_to_skip = 0, count_of_twos = 0;
string day;
scanf("%d %d %d", &n, &k, &t);
cin >> day;
// sprawdzamy, czy musi w ogóle wychodzić z domu
for(int i=0; i<n; i++)
if(day[i]=='1') count++;
// jeśli nie musi, to liczymy ile trójek jest
if(count <= k){
for(int i=0; i<n; i++){
if(day[i]=='3' || day[i]=='1') contest++;
if(day[i]=='2') count_of_twos++;
}
remaining_to_skip = k - count;
for(int i = 0; i<n; i++){
if(day[i]=='2' && remaining_to_skip > 0){
remaining_to_skip--;
contest++;
}
}
printf("%d\n", contest);
return 0;
}
//badamy wszystkie możliwości wyjazdów i przyjazdów
for(int i = 0; i <= n-t; i++){
for(int j = i+t+1; j <= n-t; j++){
count = 0;
contest = 0;
// liczymy ile spotkań stacjonarnych opuści poza pracą i zdalnych w podróży
for(int l = 0; l < i+t; l++){
if(day[l] == '1') count++;
if(day[l] == '2' && l >= i) count++;
}
for(int l = j; l < n; l++){
if(day[l] == '1') count++;
if(day[l] == '2' && l < j+t) count++;
}
//jeśli opuszcza za dużo, zrezygnuj z tej opcji
if(count > k) continue;
//liczymy ile ma czasu na zadania poza pracą
remaining_to_skip = k - count;
for(int l=0; l<i; l++){
if(day[l] == '3') contest++;
if((day[l] == '1' || day[l] == '2' ) && remaining_to_skip > 0){
contest++;
remaining_to_skip--;
}
}
for(int l=j+t; l<n; l++){
if(day[l] == '3') contest++;
if((day[l] == '1' || day[l] == '2' ) && remaining_to_skip > 0){
contest++;
remaining_to_skip--;
}
}
//czy może pominąć jeszcze jakieś spotkania
if(contest > max_contest) max_contest = contest;
//printf("Wyjazd %d-%d, przyjazd %d-%d, godzin %d\n", i+1, i+t, j+1, j+t, contest);
}
}
printf("%d\n", max_contest);
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 63 64 65 66 67 68 69 70 71 72 | #include <stdio.h> #include <string> #include <iostream> #include <vector> using namespace std; int main(void){ int n, k, t; int count = 0, contest = 0, max_contest = -1; int remaining_to_skip = 0, count_of_twos = 0; string day; scanf("%d %d %d", &n, &k, &t); cin >> day; // sprawdzamy, czy musi w ogóle wychodzić z domu for(int i=0; i<n; i++) if(day[i]=='1') count++; // jeśli nie musi, to liczymy ile trójek jest if(count <= k){ for(int i=0; i<n; i++){ if(day[i]=='3' || day[i]=='1') contest++; if(day[i]=='2') count_of_twos++; } remaining_to_skip = k - count; for(int i = 0; i<n; i++){ if(day[i]=='2' && remaining_to_skip > 0){ remaining_to_skip--; contest++; } } printf("%d\n", contest); return 0; } //badamy wszystkie możliwości wyjazdów i przyjazdów for(int i = 0; i <= n-t; i++){ for(int j = i+t+1; j <= n-t; j++){ count = 0; contest = 0; // liczymy ile spotkań stacjonarnych opuści poza pracą i zdalnych w podróży for(int l = 0; l < i+t; l++){ if(day[l] == '1') count++; if(day[l] == '2' && l >= i) count++; } for(int l = j; l < n; l++){ if(day[l] == '1') count++; if(day[l] == '2' && l < j+t) count++; } //jeśli opuszcza za dużo, zrezygnuj z tej opcji if(count > k) continue; //liczymy ile ma czasu na zadania poza pracą remaining_to_skip = k - count; for(int l=0; l<i; l++){ if(day[l] == '3') contest++; if((day[l] == '1' || day[l] == '2' ) && remaining_to_skip > 0){ contest++; remaining_to_skip--; } } for(int l=j+t; l<n; l++){ if(day[l] == '3') contest++; if((day[l] == '1' || day[l] == '2' ) && remaining_to_skip > 0){ contest++; remaining_to_skip--; } } //czy może pominąć jeszcze jakieś spotkania if(contest > max_contest) max_contest = contest; //printf("Wyjazd %d-%d, przyjazd %d-%d, godzin %d\n", i+1, i+t, j+1, j+t, contest); } } printf("%d\n", max_contest); return 0; } |
English