Codeforces Round #303 (Div. 2), problem: (C) Woodcutters 【贪心+尽可能的往左边放】

Codeforces Round #303 (Div. 2), problem: © Woodcutters


题目大意

樵夫砍柴问题,砍完后可以放左边也可以放右边,但是我们不能将木头超过放置点了 所以需要考虑是放过去呢,还是不放 然后要是砍的木头尽可能的多


题解

贪心思路,要使砍下的木头尽可能多,那么对于第一根和最后一根 我们是必定砍的,那么对于中间部分的木头 我们优先往左放 实在不行的话就判断右方 然后将当前的起始点更新

不过对于n==1的情况 需特殊处理一下 是必定砍下这棵树 所以能得到1根木头

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,idx[maxn],loc[maxn];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>idx[i]>>loc[i];
    int cnt=2;
    for(int i=1;i<n-1;i++){
        if(idx[i]-idx[i-1]>loc[i])
            cnt++;
        else if(idx[i+1]-idx[i]>loc[i]){
            cnt++;
            idx[i]+=loc[i];
        }
    }
    n==1? cout<<1<<endl: cout<<cnt<<endl;
    return 0;
}
学如逆水行舟,不进则退
一百个Chocolate CSDN认证博客专家 CSDN博客专家 博客之星 前端开发攻城狮
JS,TS,LeetCode,Vue,React,算法爱好者。
主要分享前端知识,立志成为优秀前端博主。
座右铭:学如逆水行舟,不进则退!
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值