#include <bits/stdc++.h> #define mp make_pair #define fi first #define se second using namespace std; priority_queue<pair<int,int>> com; int main() { int t; scanf("%d",&t); for(int qq=0;qq<t;qq++){ int n; int cz=0; char c; bool fo=true; scanf("%d\n",&n); for(int i=0;i<n;i++){ scanf("%c",&c); if(c=='1'){ if(fo){ com.push(mp(cz*10,1)); fo=false; } else { com.push(mp(cz*5,2)); } cz=0; } else { cz++; } } if(com.empty()){ printf("0\n"); continue; } com.push(mp(cz*10,1)); int pans=0; int cou=0; pair<int,int> tmpp; while(!com.empty()){ tmpp=com.top(); com.pop(); //printf("tmpp: %d %d\n",tmpp.fi,tmpp.se); if(tmpp.se==1){ tmpp.fi/=10; pans+=max(0,tmpp.fi-cou); cou++; } else { tmpp.fi/=5; tmpp.fi=max(0,tmpp.fi-2*cou); if(tmpp.fi==0){ continue; } if(tmpp.fi==1){ pans++; cou+=1; } else { pans+=tmpp.fi-1; cou+=2; } } } printf("%d\n",n-pans); } 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 | #include <bits/stdc++.h> #define mp make_pair #define fi first #define se second using namespace std; priority_queue<pair<int,int>> com; int main() { int t; scanf("%d",&t); for(int qq=0;qq<t;qq++){ int n; int cz=0; char c; bool fo=true; scanf("%d\n",&n); for(int i=0;i<n;i++){ scanf("%c",&c); if(c=='1'){ if(fo){ com.push(mp(cz*10,1)); fo=false; } else { com.push(mp(cz*5,2)); } cz=0; } else { cz++; } } if(com.empty()){ printf("0\n"); continue; } com.push(mp(cz*10,1)); int pans=0; int cou=0; pair<int,int> tmpp; while(!com.empty()){ tmpp=com.top(); com.pop(); //printf("tmpp: %d %d\n",tmpp.fi,tmpp.se); if(tmpp.se==1){ tmpp.fi/=10; pans+=max(0,tmpp.fi-cou); cou++; } else { tmpp.fi/=5; tmpp.fi=max(0,tmpp.fi-2*cou); if(tmpp.fi==0){ continue; } if(tmpp.fi==1){ pans++; cou+=1; } else { pans+=tmpp.fi-1; cou+=2; } } } printf("%d\n",n-pans); } return 0; } |