//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"; } } } |
English