【序】
二分用的一点不熟,做个专题好了。
---------------------
一、从有序数组中查找某个值
---------------------
二、假定一个解并判断是否可行
1、POJ1064
有N条绳子长度为Li。从中切割出K条长度相同的绳子,求这K条绳子最长能有多长。
const int maxn=11111; int n,k; double a[maxn]; bool C(double x) { int sum=0; REP(i,n) sum+=int(a[i]/x); return sum>=k; } int main() { while (~scanf("%d%d",&n,&k)) { REP(i,n) scanf("%lf",&a[i]); double l=0; double r=OO; while (r-l>EPS) { double mid=(l+r)/2; if (C(mid)) l=mid; else r=mid; } double ans=floor(((l+r)/2+EPS)*100)/100; printf("%0.2f ",ans); } return 0; }
---------------------
三、最大化最小值
---------------------
四、最大化平均值