#include <bits/stdc++.h> using namespace std; const int SIZE=2e5+5; int tab[SIZE]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); long long X,Y,Z,SP,bud; int T,N,a,ind1,ind2,x; cin>>T; while(T--){ SP=0; cin>>N; for(int i=1;i<=N;i++){ cin>>a; tab[i]=a; if(a){SP++;} } ind1=0;ind2=4e7; while(ind1<=ind2){ x=(ind1+ind2)/2; bud=x; X=0; Y=SP; for(int i=1;i<=N;i++){ if(!tab[i]){continue;} Y--; Z=0; while(Z<200){ if(bud-Z<0){bud=-1;break;} if(X*(Y+bud-Z)*(Z+1) >=tab[i]){break;} if(X*(Y+bud-Z)*(Z+1) + (X+Y+bud-Z)*(Z*Z+Z)/2 >=tab[i]){break;} if(X*(Y+bud-Z)*(Z+1) + (X+Y+bud-Z)*(Z*Z+Z)/2 + (Z*Z*Z-Z)/6 >=tab[i]){break;} Z++; } if(bud==-1){break;} X+=Z+1; bud-=Z; } if(bud>=0){ ind2=x-1; }else ind1=x+1; } cout<<ind2+1+SP<<'\n'; } //cout<<X; 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 | #include <bits/stdc++.h> using namespace std; const int SIZE=2e5+5; int tab[SIZE]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); long long X,Y,Z,SP,bud; int T,N,a,ind1,ind2,x; cin>>T; while(T--){ SP=0; cin>>N; for(int i=1;i<=N;i++){ cin>>a; tab[i]=a; if(a){SP++;} } ind1=0;ind2=4e7; while(ind1<=ind2){ x=(ind1+ind2)/2; bud=x; X=0; Y=SP; for(int i=1;i<=N;i++){ if(!tab[i]){continue;} Y--; Z=0; while(Z<200){ if(bud-Z<0){bud=-1;break;} if(X*(Y+bud-Z)*(Z+1) >=tab[i]){break;} if(X*(Y+bud-Z)*(Z+1) + (X+Y+bud-Z)*(Z*Z+Z)/2 >=tab[i]){break;} if(X*(Y+bud-Z)*(Z+1) + (X+Y+bud-Z)*(Z*Z+Z)/2 + (Z*Z*Z-Z)/6 >=tab[i]){break;} Z++; } if(bud==-1){break;} X+=Z+1; bud-=Z; } if(bud>=0){ ind2=x-1; }else ind1=x+1; } cout<<ind2+1+SP<<'\n'; } //cout<<X; return 0;} |