ArcTan

dfs
随笔 - 16, 文章 - 117, 评论 - 6, 引用 - 0
数据加载中……

SRM548 DIVⅡ-500PT(二分答案OR贪心)

二分答案倒是很快就想到了的,刚开始没有想好怎么验证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要雪耻才行!



posted on 2012-07-03 10:15 wangs 阅读(159) 评论(0)  编辑 收藏 引用 所属分类: Topcoder


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理