http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3021
题意:先给你N,K,L,M四个数。然后是学期结束要给老师评分,老师的平均分低于 L 分就会被解雇。每个人可以评 1 到 N 的整数分,现在已经有 M 个人评分了,这 M 个人评分后老师的平均分是 K 。现在问你最少还要投多少票可以让这个老师被解雇。
为了让老师被解雇,那么最少需要的这几个人都给老师打1分就可以。然后用二分枚举最少需要的人数就可以。要注意的是这个题会卡精度…
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
double k,l;
ll n,m;
bool check(ll x){
double xx;
if(n == k) xx = floor(m * k);
else xx = floor(m * (k + 0.049999999999));
xx += x;
xx /= (m+x);
return xx < l;
}
int main(){
while(~scanf("%lld%lf%lf%lld",&n,&k,&l,&m)){
l += 0.049999999999;
ll L = 0,R = 1e16,ans = -1,mid;
while(L <= R){
mid = (R-L)/2 + L;
if(check(mid)){
ans = mid;
R = mid - 1;
}
else L = mid + 1;
}
printf("%lld\n",ans);
}
return 0;
}