题目链接 : POJ2976 http://poj.org/problem?id=2976
分析 : 注意浮点数溢出,注释的写法就wa了,以后还是先转换类型再四舍五入吧
code : #include<iostream> #include<vector> #include<algorithm> #include<queue> #include<cstring> #include<cstdio> using namespace std; typedef long long ll; const int maxn = 1003; int a[maxn],b[maxn],n,k; double c[maxn]; bool cmp(const double &A,const double &B) { return A>B; } bool check(double mid) { double sum=0.0; for(int i=1;i<=n;i++) c[i]=a[i]*1.0-b[i]*1.0*mid; sort(c+1,c+1+n,cmp); for(int i=1;i<=n-k;i++) sum+=c[i]; return sum>=0; } int main() { while(~scanf("%d%d",&n,&k)) { if(!n&&!k) break; for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]); double l=0.0,r=1.0; while(r-l>1e-7) { double mid=(l+r)/2.0; if(check(mid)) l=mid; else r=mid; } //printf("%.0lf\n",4.499999); printf("%d\n",int(l*100+0.5)); } return 0; }