木材加工
木材加工
| Time Limit: 1000MS | Memory Limit: 65535KB |
| Submissions: 222 | Accepted: 63 |
Sample Input
3 7 232 124 456
Sample Output
114
解析:
这一类题取值时都会用到二分查找的算法,然后就是很卡精度,注意精度就可以了
这道题我还遇到了一个像5.999998的情况,这时需要取6,因此直接强制转换要出问题,做一点处理即可
# include<stdio.h> #define eps 10e-4 int main() { int nWood,nPerson; int sign[10005]; int i,cnt,maxnum=0,res; double st,en,mid; scanf("%d %d",&nWood,&nPerson); for(i=0;i<nWood;i++) { scanf("%d",&sign[i]); if(sign[i]>maxnum) maxnum=sign[i]; } st=0.0; en=(double)maxnum; while(en-st>eps) { cnt=0; mid=(st+en)/2;//折半查找的思想 for(i=0;i<nWood;i++) cnt+=(int)(sign[i]/mid); if(cnt<nPerson) en=mid; else st=mid; } res=(int)mid;//强制转换后mid值没变 res=(mid-res)>=0.999?(res+1):res;//会出现像5.999998的情况,这时就取6 printf("%d\n",res); return 0; }
浙公网安备 33010602011771号