#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int Maxn=100010;
long long a[Maxn];
long long n,k;
long long ans;
void erfen(long long left,long long right)
{
if(left>right) return ;
long long mid=(left+right)/2;
int i;
long long t=0;
for(i=n-1;i>=0;i--)
{
if(mid>=a[i]) break;
else
{
t+=(a[i]-mid)/k;
if((a[i]-mid)%k>0) t++;
}
}
if(t>mid) erfen(mid+1,right);
else {ans=mid; erfen(left,mid-1);}
}
int main()
{
scanf("%lld",&n);
int i;
memset(a,0,sizeof(a));
for(i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
scanf("%lld",&k);
if(k==1) cout<<a[n-1]<<endl;
else
{
k--;
erfen(1,a[n-1]);
cout<<ans<<endl;
}
return 0;
}
POJ 3104
最新推荐文章于 2021-10-05 20:30:55 发布