题目:
分析:
很容易归解为二分查找
代码:
int f(int c,vector<int> p)
{//速度为c时,消耗的时间。
int all=0;
for(int i=0;i<p.size();i++)
{
if(p[i]%c) {
all+=p[i]/c;
all++;
}
else{
all+=p[i]/c;
}
}
return all;
}
int main()
{
int h=6;
vector<int> p;
p.push_back(30);
p.push_back(11);
p.push_back(23);
p.push_back(4);
p.push_back(20);
sort(p.begin(),p.end());
if(h==p.size()) return p[p.size()-1];
if(p.size()==1)
{
if(p[0]%h) return p[0]/h+1;
return p[0]/h;
}
int b=1;
long long all=0;
int e=0;
for(int i=0;i<p.size();i++)
{
e=max(e,p[i]);
}
while(b<e)
{
int c=b+(e-b)/2;
cout<<b<<" "<<e<<" "<<f(c,p)<<endl;
if(f(c,p)<=h)
{//小于总时间,说明吃的快了。还可以减小吃的速度。
e=c;
}
else {
b=c+1;
}
}
return e;
}