二分答案倒是很快就想到了的,刚开始没有想好怎么验证check()。后面就跪在这里了。。。。tree.height>=1啊。。。
毛哥给的办法是行的,贪心。ORZ,ORZ,我没写呀。。。。
爆零。。其实应该果断提交的吧?
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
int h[55],n;
int max(int x,int y)
{
return x>y?x:y;
}
bool check(int x)
{
int last,now,i;
last=max(h[0]-x,1);
for (i=1;i<n;i++){
now=h[i];
if (now+x<=last)
return false;
last=max(last+1,now-x);
}
return true;
}
class KingdomAndTrees{
public:
int minLevel(vector <int> heights){
int l,r,mid,i;
n=heights.size();
for (i=0;i<n;i++)
h[i]=heights[i];
l=0;r=0;
for (i=0;i<n;i++)
if (h[i]>r)
r=h[i];
r=r+n;
while (l<r){
mid=(l+r)/2;
if (check(mid))
r=mid;
else
l=mid+1;
}
return r;
}
};
下次TC要雪耻才行!