#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 |