#include <bits/stdc++.h>
#define cpp std
#define duza_liczba long long
#define QED return 0;}
#define niniejszym_oglaszam_moj_kod_za_rozpoczety int main(){
#define szybciej_dzialaj_ceplusplusie ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define wczytaj_n_oraz_s cin >> n >> s
#define wczytaj_q cin >> q
#define tak_dlugo_jak while
#define zwykla_liczba int
#define ciag_znakow string
#define zmniejsz --
#define zwieksz ++
#define uzywajac_nazwe_przestrzeni using namespace
#define koniec_instrukcji ;
#define poza_tym ,
#define nawiasie_okragly_otworz_sie (
#define nawiasie_okragly_zamknij_sie )
#define nawiasie_klamrowy_otworz_sie {
#define nawiasie_klamrowy_zamknij_sie }
#define zeruj res = 0;a = -1;prz.clear();p = 0;k = 0;cnt = 0;trueres = 0
uzywajac_nazwe_przestrzeni cpp koniec_instrukcji
zwykla_liczba q poza_tym n koniec_instrukcji
ciag_znakow s koniec_instrukcji
vector <int> prz;
int a = -1, cnt, p, k, res, trueres;
niniejszym_oglaszam_moj_kod_za_rozpoczety
szybciej_dzialaj_ceplusplusie koniec_instrukcji
wczytaj_q koniec_instrukcji
zwieksz q koniec_instrukcji
tak_dlugo_jak nawiasie_okragly_otworz_sie zmniejsz q nawiasie_okragly_zamknij_sie nawiasie_klamrowy_otworz_sie
wczytaj_n_oraz_s koniec_instrukcji
zeruj koniec_instrukcji
for(int i = 0; i < n; i++){
if(s[i] == '1' && a == -1){
p = i;
a = i;
}
else if(s[i] == '1'){
prz.push_back(i - a - 1);
a = i;
}
else if(s[i] == '0' && i == n - 1){
k = i - a;
}
}
prz.push_back(0);
sort(prz.begin(), prz.end());
for(int i = prz.size() - 1; i >= 0; i--){
if(prz[i] - cnt * 2 > 0){
res++;
cnt++;
}
if(prz[i] - cnt * 2 > 0){
res += prz[i] - cnt * 2;
cnt++;
}
}
trueres = max(trueres, res);
res = p;
cnt = 1;
for(int i = prz.size() - 1; i >= 0; i--){
if(prz[i] - cnt * 2 > 0){
res++;
cnt++;
}
if(prz[i] - cnt * 2 > 0){
res += prz[i] - cnt * 2;
cnt++;
}
}
trueres = max(trueres, res);
res = k;
cnt = 1;
for(int i = prz.size() - 1; i >= 0; i--){
if(prz[i] - cnt * 2 > 0){
res++;
cnt++;
}
if(prz[i] - cnt * 2 > 0){
res += prz[i] - cnt * 2;
cnt++;
}
}
trueres = max(trueres, res);
res = p + k - 1;
cnt = 2;
for(int i = prz.size() - 1; i >= 0; i--){
if(prz[i] - cnt * 2 > 0){
res++;
cnt++;
}
if(prz[i] - cnt * 2 > 0){
res += prz[i] - cnt * 2;
cnt++;
}
}
trueres = max(trueres, res);
cout << n - trueres << '\n';
nawiasie_klamrowy_zamknij_sie
QED
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 | #include <bits/stdc++.h> #define cpp std #define duza_liczba long long #define QED return 0;} #define niniejszym_oglaszam_moj_kod_za_rozpoczety int main(){ #define szybciej_dzialaj_ceplusplusie ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) #define wczytaj_n_oraz_s cin >> n >> s #define wczytaj_q cin >> q #define tak_dlugo_jak while #define zwykla_liczba int #define ciag_znakow string #define zmniejsz -- #define zwieksz ++ #define uzywajac_nazwe_przestrzeni using namespace #define koniec_instrukcji ; #define poza_tym , #define nawiasie_okragly_otworz_sie ( #define nawiasie_okragly_zamknij_sie ) #define nawiasie_klamrowy_otworz_sie { #define nawiasie_klamrowy_zamknij_sie } #define zeruj res = 0;a = -1;prz.clear();p = 0;k = 0;cnt = 0;trueres = 0 uzywajac_nazwe_przestrzeni cpp koniec_instrukcji zwykla_liczba q poza_tym n koniec_instrukcji ciag_znakow s koniec_instrukcji vector <int> prz; int a = -1, cnt, p, k, res, trueres; niniejszym_oglaszam_moj_kod_za_rozpoczety szybciej_dzialaj_ceplusplusie koniec_instrukcji wczytaj_q koniec_instrukcji zwieksz q koniec_instrukcji tak_dlugo_jak nawiasie_okragly_otworz_sie zmniejsz q nawiasie_okragly_zamknij_sie nawiasie_klamrowy_otworz_sie wczytaj_n_oraz_s koniec_instrukcji zeruj koniec_instrukcji for(int i = 0; i < n; i++){ if(s[i] == '1' && a == -1){ p = i; a = i; } else if(s[i] == '1'){ prz.push_back(i - a - 1); a = i; } else if(s[i] == '0' && i == n - 1){ k = i - a; } } prz.push_back(0); sort(prz.begin(), prz.end()); for(int i = prz.size() - 1; i >= 0; i--){ if(prz[i] - cnt * 2 > 0){ res++; cnt++; } if(prz[i] - cnt * 2 > 0){ res += prz[i] - cnt * 2; cnt++; } } trueres = max(trueres, res); res = p; cnt = 1; for(int i = prz.size() - 1; i >= 0; i--){ if(prz[i] - cnt * 2 > 0){ res++; cnt++; } if(prz[i] - cnt * 2 > 0){ res += prz[i] - cnt * 2; cnt++; } } trueres = max(trueres, res); res = k; cnt = 1; for(int i = prz.size() - 1; i >= 0; i--){ if(prz[i] - cnt * 2 > 0){ res++; cnt++; } if(prz[i] - cnt * 2 > 0){ res += prz[i] - cnt * 2; cnt++; } } trueres = max(trueres, res); res = p + k - 1; cnt = 2; for(int i = prz.size() - 1; i >= 0; i--){ if(prz[i] - cnt * 2 > 0){ res++; cnt++; } if(prz[i] - cnt * 2 > 0){ res += prz[i] - cnt * 2; cnt++; } } trueres = max(trueres, res); cout << n - trueres << '\n'; nawiasie_klamrowy_zamknij_sie QED |
English