#include <bits/stdc++.h>
using namespace std;
long long tab[200009];
int n;
bool CzyGit(long long s)
{
long long a=0;
for(int i=1;i<=n;i++)
{
long long x=0;
while(a*x*s+x*(x-1)*(a+s)/2+x*(x-1)*(x-2)/6<tab[i])
{
if(s<=0){return 0;}
x++;
s--;
}
a+=x;
}
return 1;
}
long long BinSearch()
{
long long l=0,p=n*20;
while(l<p)
{
const long long mid=(l+p)>>1;
if(CzyGit(mid))
{
p=mid;
}
else
{
l=mid+1;
}
}
return l;
}
int main()
{ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int N;
cin>>N;
for(int I=1;I<=N;I++)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>tab[i];
}
cout<<BinSearch()<<'\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 | #include <bits/stdc++.h> using namespace std; long long tab[200009]; int n; bool CzyGit(long long s) { long long a=0; for(int i=1;i<=n;i++) { long long x=0; while(a*x*s+x*(x-1)*(a+s)/2+x*(x-1)*(x-2)/6<tab[i]) { if(s<=0){return 0;} x++; s--; } a+=x; } return 1; } long long BinSearch() { long long l=0,p=n*20; while(l<p) { const long long mid=(l+p)>>1; if(CzyGit(mid)) { p=mid; } else { l=mid+1; } } return l; } int main() {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int N; cin>>N; for(int I=1;I<=N;I++) { cin>>n; for(int i=1;i<=n;i++) { cin>>tab[i]; } cout<<BinSearch()<<'\n'; } return 0; } |
English