#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector <ll> oni;
ll n;
bool sprawdz(int dod)
{
ll zuz=0;
for(ll i=1;i<=n;i++)
{
if(i>1000) i=max(i,n-1001);
ll a=1;
while((i-1+zuz)*a*(n-i+dod-zuz-a+1)*(i!=n)+(a>1)*(a-1)*a*(n+dod-a)/2+(a>2)*(a-2)*(a-1)*a/6<oni[i])
{
a++;
//cout<<(i-1+zuz)*a*(n-i+dod-zuz-a+1)*(i!=n)+(a>1)*(a-1)*a*(n+dod-a)/2+(a>2)*(a-2)*(a-1)*a/6<<"-"<<a<<"-"<<i<<"\n";
if(zuz+a-1>dod) return 0;
}
//cout<<(i-1+zuz)*a*(n-i+dod-zuz-a+1)*(i!=n)+(a>1)*(a-1)*a*(n+dod-a)/2+(a>2)*(a-2)*(a-1)*a/6<<"-"<<a<<"-"<<i<<"\n";
zuz+=a-1;
if(zuz>dod) return 0;
}
return 1;
}
int main()
{
cin.tie(0)->sync_with_stdio(0);
int sen;
cin>>sen;
for(int ar=0;ar<sen;ar++)
{
cin>>n;
oni.resize(1);
oni[0]=0;
for(int i=0;i<n;i++)
{
int a;
cin>>a;
if(a!=0) oni.push_back(a);
}
n=oni.size()-1;
ll a=0,b=3137;
while(a<b)
{
int s=(a+b)/2;
if(sprawdz(s)) b=s;
else a=s+1;
}
cout<<n+b<<"\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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; vector <ll> oni; ll n; bool sprawdz(int dod) { ll zuz=0; for(ll i=1;i<=n;i++) { if(i>1000) i=max(i,n-1001); ll a=1; while((i-1+zuz)*a*(n-i+dod-zuz-a+1)*(i!=n)+(a>1)*(a-1)*a*(n+dod-a)/2+(a>2)*(a-2)*(a-1)*a/6<oni[i]) { a++; //cout<<(i-1+zuz)*a*(n-i+dod-zuz-a+1)*(i!=n)+(a>1)*(a-1)*a*(n+dod-a)/2+(a>2)*(a-2)*(a-1)*a/6<<"-"<<a<<"-"<<i<<"\n"; if(zuz+a-1>dod) return 0; } //cout<<(i-1+zuz)*a*(n-i+dod-zuz-a+1)*(i!=n)+(a>1)*(a-1)*a*(n+dod-a)/2+(a>2)*(a-2)*(a-1)*a/6<<"-"<<a<<"-"<<i<<"\n"; zuz+=a-1; if(zuz>dod) return 0; } return 1; } int main() { cin.tie(0)->sync_with_stdio(0); int sen; cin>>sen; for(int ar=0;ar<sen;ar++) { cin>>n; oni.resize(1); oni[0]=0; for(int i=0;i<n;i++) { int a; cin>>a; if(a!=0) oni.push_back(a); } n=oni.size()-1; ll a=0,b=3137; while(a<b) { int s=(a+b)/2; if(sprawdz(s)) b=s; else a=s+1; } cout<<n+b<<"\n"; } } |
English