华电北风吹 天津大学认知计算与应用重点实验室 2016-08-14
题目链接: http://hihocoder.com/problemset/problem/1357
题目分析: 题目很简单,二分即可。
#include <iostream> #include <algorithm> using namespace std; int data[100005]; int N, M, K; bool Func(int T) { int p = K, val = M; for (int i = 0; i < N; i++) { if (data[i] >= val) { p--; val = M; if (p == 0) { return false; } } else { val -= data[i]; } val = min(M, val + T); } return true; } int main() { cin >> N >> M >> K; for (int i = 0; i < N; i++) { cin >> data[i]; } int T = 1; while (Func(T) == false) { T *= 2; } int start = T / 2, end = T; while (start < end - 1) { int mid = (start + end) / 2; if (Func(mid) == false) { start = mid; } else { end = mid; } } cout << start + 1 << endl; return 0; }