码迷,mamicode.com
首页 > 其他好文 > 详细

C. Woodcutters

时间:2015-08-09 01:42:40      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

题目链接

题意:

n个树,在x1,x2,。。。,xn的位置,树的高度依次是h1,h2,。。。,hn

求的是当把树砍倒时候,不占用相邻树的位置,最大砍树个数

可向左 向右砍,即树向左向右倒,很显然 当树的棵树大于1的时候,一定至少可以砍倒两棵树,位于最左和最右的两棵树可以直接砍倒

可以先考虑左砍树,再考虑右砍树

满足左砍树时候,不用考虑右砍树。

对xi 和 hi

左砍树 树最左可到  xi – hi

当 xi – hi> x[i-1] 时候左砍成立  x[i-1] 更新到x[i]

右砍树 树最右可到 x[i] + h[i]

当  x[i] + h[i] < x[i+1] 时候右砍成立  x[i] 更新到 x[i] + h[i]

Java程序

import java.util.Scanner;


public class C545 {
    static void run(){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] x= new int[n];
        int[] h=new int [n];
        for(int i=0;i<n;i++){
            x[i]=sc.nextInt();
            h[i]=sc.nextInt();
        }
        int count = 2;
        if(n==1){
                System.out.println(1);
                return;
            }
        for(int i=1;i<n-1;i++){
            int left = x[i] - h[i];
            int right = x[i] + h[i];
            if(left>x[i-1] || right<x[i+1]) count ++;
            if(left>x[i-1]) x[i-1] = x[i];
            else if(right< x[i+1]) x[i] = right;
        }
        System.out.println(count);
    }
    public static void main(String[] args){
        run();
    }
}

Python程序

def C545():
    n = input()
    w = [map(int,raw_input().split()) for _ in xrange(n)]
    ans = 2
    if n <= 2:
        print n
        exit(0)
    for i in xrange(1,n-1):
        x,h = w[i] 
        if x - h > w[i-1][0]:
            ans += 1
        elif x + h < w[i+1][0]:
            w[i][0] += w[i][1]
            ans += 1
    print ans    
    
if __name__==__main__:
    C545()

C. Woodcutters

标签:

原文地址:http://www.cnblogs.com/theskulls/p/4714363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!