//Mikołaj Bereza //Runda Druga [B] Pandemia #include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; int main() { cin.tie(0);ios_base::sync_with_stdio(0); int t; cin>>t; for(int i=0;i<t;i++) { //Przypadki uint64_t score=0; ///Tak naprawdę liczba zaszczepionych więc na koncu wypisz: // cout<<n-score<<"\n"; vector<int>ZarazoneNaPoczatku; string miasto; int n;cin>>n; int k=0; bool pierwszeuzyte=false; bool ostatnieuzyte=false; cin>>miasto; for(int j=0; j<n;j++) { if(miasto[j]==49) { ZarazoneNaPoczatku.push_back(j); } } if(ZarazoneNaPoczatku.size()==0) { cout<<"0"; } else { vector<int> Przerwy; for(int j=1;j<ZarazoneNaPoczatku.size();j++) { Przerwy.push_back(ZarazoneNaPoczatku[j]-ZarazoneNaPoczatku[j-1]-2); } int pierwsza=ZarazoneNaPoczatku[0]; int ostatnia=(n-ZarazoneNaPoczatku[ZarazoneNaPoczatku.size()-1]-1); sort(Przerwy.begin(), Przerwy.end(), greater<int>()); for(int j=0;j<Przerwy.size();j++) { if(pierwsza-k>0&&((pierwszeuzyte==false&&(pierwsza-k)*2>=Przerwy[j]-(2*k))&&pierwsza>=ostatnia)) { score+=(pierwsza-k); k+=1; pierwszeuzyte=true; } else if(ostatnia-k>0&&(ostatnieuzyte==false&&(ostatnia-k)*2>=Przerwy[j]-(2*k))) { score+=(ostatnia-k); k+=1; ostatnieuzyte=true; } else if(Przerwy[j]-(2*k)>0) { score+=Przerwy[j]-(2*k); k+=2; } else {break;} } cout<<n-score<<"\n"; } } }
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 | //Mikołaj Bereza //Runda Druga [B] Pandemia #include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; int main() { cin.tie(0);ios_base::sync_with_stdio(0); int t; cin>>t; for(int i=0;i<t;i++) { //Przypadki uint64_t score=0; ///Tak naprawdę liczba zaszczepionych więc na koncu wypisz: // cout<<n-score<<"\n"; vector<int>ZarazoneNaPoczatku; string miasto; int n;cin>>n; int k=0; bool pierwszeuzyte=false; bool ostatnieuzyte=false; cin>>miasto; for(int j=0; j<n;j++) { if(miasto[j]==49) { ZarazoneNaPoczatku.push_back(j); } } if(ZarazoneNaPoczatku.size()==0) { cout<<"0"; } else { vector<int> Przerwy; for(int j=1;j<ZarazoneNaPoczatku.size();j++) { Przerwy.push_back(ZarazoneNaPoczatku[j]-ZarazoneNaPoczatku[j-1]-2); } int pierwsza=ZarazoneNaPoczatku[0]; int ostatnia=(n-ZarazoneNaPoczatku[ZarazoneNaPoczatku.size()-1]-1); sort(Przerwy.begin(), Przerwy.end(), greater<int>()); for(int j=0;j<Przerwy.size();j++) { if(pierwsza-k>0&&((pierwszeuzyte==false&&(pierwsza-k)*2>=Przerwy[j]-(2*k))&&pierwsza>=ostatnia)) { score+=(pierwsza-k); k+=1; pierwszeuzyte=true; } else if(ostatnia-k>0&&(ostatnieuzyte==false&&(ostatnia-k)*2>=Przerwy[j]-(2*k))) { score+=(ostatnia-k); k+=1; ostatnieuzyte=true; } else if(Przerwy[j]-(2*k)>0) { score+=Przerwy[j]-(2*k); k+=2; } else {break;} } cout<<n-score<<"\n"; } } } |