标签:pac red cos sign isp ilo hide style company
Input
Output
Sample Input
4 11 8.02 7.43 4.57 5.39
Sample Output
2.0
题意:有n段长度分别为Li的电缆,要求把它们分割成K条长度为X的电缆,问X的最大值为多少。
1 #include<cstdio> 2 #include<cstring> 3 #include<stack> 4 #include<queue> 5 #include<algorithm> 6 #include<map> 7 #include<cmath> 8 #include<vector> 9 #define PI acos(-1.0) 10 using namespace std; 11 #define Inf 0x3f3f3f3f 12 #define exp 1e-8 13 typedef long long ll; 14 int m,n; 15 double str[58899]; 16 int visit[50][50][50][50]; 17 int dis[500][500]; 18 int di[8][4]= {{0,0,0,1},{0,0,0,-1},{0,0,1,0},{0,0,-1,0},{0,1,0,0},{0,-1,0,0},{1,0,0,0},{-1,0,0,0}}; 19 map<ll,ll>::iterator it; 20 bool solve(double mid) 21 { 22 int ans=0; 23 for(int i=0;i<m;i++) 24 { 25 ans+=(int)(str[i]/mid); 26 } 27 return ans>=n; 28 } 29 int main() 30 { 31 int i,j; 32 while( scanf("%d%d",&m,&n)!=-1){ 33 for(i=0;i<m;i++) 34 { 35 scanf("%lf",&str[i]); 36 } 37 double left=0,right=Inf,mid; 38 int ans; 39 i=1000; 40 while(i--) 41 { 42 mid=(left+right)/2; 43 if(solve(mid)) 44 { 45 left=mid; 46 } 47 else 48 { 49 right=mid; 50 } 51 } 52 printf("%0.2lf\n",floor(right*100)/100.0); 53 } 54 return 0; 55 }
题解:将X视为变量,可知它的范围为0~max; 那么问题就变成了电缆长度取X时,所得的电缆条数大于,还是等于,或小于K的问题。 用二分查找法能很快的找出K的值,不过要注意精度,直接输出时会四舍五入,五入时的结果肯定是错的,注意向下取整。
标签:pac red cos sign isp ilo hide style company
原文地址:https://www.cnblogs.com/moomcake/p/9351523.html