使用floor函数。floor(x)返回的是小于或等于x的最大整数。
如: floor(10.5) == 10 floor(-10.5) == -11
使用ceil函数。ceil(x)返回的是大于x的最小整数。
如: ceil(10.5) == 11 ceil(-10.5) ==-10
floor()是向负无穷大舍入,floor(-10.5) == -11;
ceil()是向正无穷大舍入,ceil(-10.5) == -10
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
const int MAXN = 1e5+ 10;
long long num[MAXN];
int main(){
int n;
while(~scanf("%d",&n)){
long long maxvalue = 0;
memset(num,0,sizeof(num));
for(int i = 0 ; i < n ; i ++){
scanf("%lld",&num[i]);
maxvalue = max(num[i],maxvalue);
}
long long k;
scanf("%lld",&k);
if(k == 1){
printf("%lld\n",maxvalue);
continue;
}
long long lp = 1,ans = 0,rp = maxvalue;
while(lp <= rp){
long long mid = (lp + rp) / 2,sum = 0;
for(int i = 0 ; i < n ; i ++){
if(num[i] > mid){
long long xx = ceil((num[i] - mid) * 1.0 /(k-1));
sum += xx;
}
}
if(sum <= mid){
ans = mid;
rp = mid - 1;
}
else
lp = mid + 1;
}
printf("%lld\n",ans);
}
}
使用floor函数。floor(x)返回的是小于或等于x的最大整数。
如: floor(10.5) == 10 floor(-10.5) == -11
使用ceil函数。ceil(x)返回的是大于x的最小整数。
如: ceil(10.5) == 11 ceil(-10.5) ==-10
floor()是向负无穷大舍入,floor(-10.5) == -11;
ceil()是向正无穷大舍入,ceil(-10.5) == -10