Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
不需要 __int64,int 就够了,二分的时候把上界设为已知的最长段即可 47MS#include <cstdio> #define MAXN 10000 int _ns[MAXN]; int _k, _n, _maxL = 0, _res = 0; void Ipt() { scanf("%d%d", &_n, &_k); double ipt; for (int i = 0; i < _n; ++i) { scanf("%lf", &ipt); _ns[i] = int(ipt * 100); if (_maxL < _ns[i]) { _maxL = _ns[i]; } } } inline void Opt() { printf("%.2lf\n", double(_res) / 100.0); } bool Test(int len) { int i, j, t; for (i = 0, j = 0; i < _n && j < _k; ++i) { t = _ns[i]; while (j < _k && t >= len) { t -= len; ++j; } } if (j < _k) { return false; } if (_res < len) { _res = len; } return true; } void BinarySearch() { int begin = 0; int end = _maxL + 1; int mid; while (begin != end) { mid = ((begin + end) >> 1); if (Test(mid)) { begin = mid + 1; } else { end = mid; } } } int main() { Ipt(); BinarySearch(); Opt(); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator