猴子吃桃
**题目描述:**孙悟空喜欢吃蟠桃,一天他乘守卫蟠桃园的天兵天将离开了而偷偷的来到王母娘娘的蟠桃园偷吃蟠桃。
已知蟠桃园有 N 棵蟠桃树,第 i 棵蟠桃树上有 N[i](大于 0)个蟠桃,天兵天将将在 H(不小于蟠桃树棵数)小时后回来。孙悟空可以决定他吃蟠桃的速度 K(单位:个 / 小时),每个小时他会选则一颗蟠桃树,从中吃掉K 个蟠桃,如果这棵树上的蟠桃数小于 K,他将吃掉这棵树上所有蟠桃,然后这一小时内不再吃其余蟠桃树上的蟠桃。孙悟空喜欢慢慢吃,但仍想在天兵天将回来前将所有蟠桃吃完。求孙悟空可以在 H 小时内吃掉所有蟠桃的
最小速度 K(K 为整数)。
输入描述
从标准输入中读取一行数字,前面数字表示每棵数上蟠桃个数,最后的数字表示天兵天将将离开的时间。
输出描述
吃掉所有蟠桃的最小速度 K(K 为整数)或输入异常时输出 - 1。
示例 1
输入:
3 11 6 7 8
输出:
4
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
string input;
getline(cin, input);
vector<int> int_vec(0);
string tmp = "";
for (int i = 0; i < input.length(); i++) {
if (input[i] != ' ' && (input[i] <= '0' || input[i] > '9')) {
cout << -1 << endl;
return -1;
}
if (input[i] != ' ') {
tmp += input[i];
}
else if(!tmp.empty()){
int_vec.push_back(atoi(tmp. c_str()));
tmp.clear();
}
}
if (!tmp.empty()) {
int_vec.push_back(atoi(tmp.c_str()));
tmp.clear();
}
int sz = int_vec.size();
if (sz != int_vec[0] + 2) {
cout << -1 << endl;
return -1;
}
vector<int> tree(0);
for (int i = 1; i < sz - 1; i++) {
tree.push_back(int_vec[i]);
}
sort(tree.begin(), tree.end());
for (int k = 1; k <= tree[sz - 3]; k++) {
int j = 0;
int time = 0;
while (j<tree.size()) {
time += tree[j] / k;
if (tree[j] % k) time++;
j++;
}
if (time < int_vec[sz - 1]) {
cout << k << endl;
return k;
}
}
cout << -1 << endl;
return -1;
}