#include <bits/stdc++.h>
using namespace std;
int main()
{
cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(0);
int t, n; // ifstream plik; plik.open("200.txt"); if (plik.good() == false) { cout << "B"; return 0; }
string st;
//plik >> t;
cin >> t;
for (int i = 0; i < t; i++)
{
priority_queue <int> wolne; //dlugosc spojnych 0
//plik >> n; plik >> st;
cin >> n >> st;
int l=0, p=0,s=0,dni=0,ile0=0,zaszczepionych=0;
bool a = 1;
while (wolne.size())
wolne.pop();
int j = 0;
for (; j < st.length(); j++)
{
if (st[j]=='0')
{
ile0++;
if (a)
l++;
}
else
{
if(j-s-1>=0 && !a)
wolne.push(j-s);
s = j + 1; a = 0;
}
}
if (ile0 ==st.length())
{
cout << "0\n"; continue;
}
p = j - s; //cout << l << " " << p << endl;
if (l > 1 || wolne.size()==0)
{
zaszczepionych += l; dni++; //cout << "L";
}
if (p - dni > dni+1 || p-dni>wolne.top() - dni * 2)
{
zaszczepionych += p - dni; dni++; //cout << "P";//cout << zaszczepionych<<endl;
}
//cout << zaszczepionych << endl;
while (wolne.size() && wolne.top()-(dni*2)>0)
{
zaszczepionych += wolne.top() - (dni * 2);
//cout << wolne.top() << " " << dni << endl;
if (wolne.top() - (dni * 2) >= 2)
{
if(wolne.top() - (dni * 2) > 2)
dni++;
zaszczepionych--;
}
dni++;
wolne.pop();
}
cout << st.length() -zaszczepionych << "\n";
}
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 <bits/stdc++.h> using namespace std; int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); int t, n; // ifstream plik; plik.open("200.txt"); if (plik.good() == false) { cout << "B"; return 0; } string st; //plik >> t; cin >> t; for (int i = 0; i < t; i++) { priority_queue <int> wolne; //dlugosc spojnych 0 //plik >> n; plik >> st; cin >> n >> st; int l=0, p=0,s=0,dni=0,ile0=0,zaszczepionych=0; bool a = 1; while (wolne.size()) wolne.pop(); int j = 0; for (; j < st.length(); j++) { if (st[j]=='0') { ile0++; if (a) l++; } else { if(j-s-1>=0 && !a) wolne.push(j-s); s = j + 1; a = 0; } } if (ile0 ==st.length()) { cout << "0\n"; continue; } p = j - s; //cout << l << " " << p << endl; if (l > 1 || wolne.size()==0) { zaszczepionych += l; dni++; //cout << "L"; } if (p - dni > dni+1 || p-dni>wolne.top() - dni * 2) { zaszczepionych += p - dni; dni++; //cout << "P";//cout << zaszczepionych<<endl; } //cout << zaszczepionych << endl; while (wolne.size() && wolne.top()-(dni*2)>0) { zaszczepionych += wolne.top() - (dni * 2); //cout << wolne.top() << " " << dni << endl; if (wolne.top() - (dni * 2) >= 2) { if(wolne.top() - (dni * 2) > 2) dni++; zaszczepionych--; } dni++; wolne.pop(); } cout << st.length() -zaszczepionych << "\n"; } return 0; } |
English