题意:
m个医生,n个病人。要么所有医生都工作要么只有一个医生工作。
每个医生工作效率相同。已知给每个病人检查要用的时间。一个病人可以让多个医生
给他看病,也就是说他可以先找医生1检查一段时间再找医生2检查一段时间。
问怎么样安排能使时间最短。输出最短时间。
思路:
可以二分共同工作的时间T,然后用所有病人需要的检查时间sum和减去n-1倍的T。
但是这个带精确度的二分我貌似还没参透啊,我写的结果总是不对。
于是我就换了下面的方法。
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; double t[1010]; bool cmp(double x,double y) { return x>y; } int main() { int m,n; double sum,tmp; while(scanf("%d%d",&m,&n)!=EOF) { sum=0; for(int i=0;i<n;i++) { scanf("%lf",&t[i]); sum+=t[i]; } if(m>n) { printf("%.4lf\n",sum); continue; } else { sort(t,t+n,cmp); double s=sum/m,ans; int i; for(i=0;i<m;i++) { if(t[i]>s) { sum-=t[i]; s=sum/(m-i-1); } else break; } double l=s; for(int j=0;j<i;j++) { l+=(t[j]-s); } printf("%.4lf\n",l); } } return 0; }