代码:
#include<cstdio>
#include<algorithm>
using namespace std;
int a[(int)1e5+10],diff[(int)1e5+10],suffix[(int)1e5+10],times[(int)1e5+10];
int main()
{
int T,kcase=0;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
diff[0]=a[0];
for(int i=1;i<n;++i)
{
diff[i]=a[i]-a[i-1];
}
suffix[n-1]=diff[n-1];
for(int i=n-2;i>=0;--i)
{
suffix[i]=min(suffix[i+1],diff[i]);
}
long long total=0;
for(int i=0;i<n;++i)
{
times[i]=diff[i]/suffix[i];
if(diff[i]%suffix[i])
{
++times[i];
}
}
for(int i=n-2;i>=0;--i)
{
if(diff[i]*(long long)times[i+1]>diff[i+1]*(long long)times[i])
{
if(diff[i]*(long long)times[i+1]%diff[i+1])
{
times[i]=diff[i]*(long long)times[i+1]/diff[i+1]+1;
}
else
{
times[i]=diff[i]*(long long)times[i+1]/diff[i+1];
}
}
}
for(int i=0;i<n;++i)
{
total+=times[i];
}
printf("Case #%d: %lld\n",++kcase,total);
}
return 0;
}
蔡弈文
全部评论