CodeForces-545C Woodcutters

来源:互联网 发布:经典都市小说知乎 编辑:程序博客网 时间:2024/05/22 15:08

C. Woodcutters
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Little Susie listens to fairy tales before bed every day. Today's fairy tale was about wood cutters and the little girl immediately started imagining the choppers cutting wood. She imagined the situation that is described below.

There are n trees located along the road at points with coordinates x1, x2, ..., xn. Each tree has its height hi. Woodcutters can cut down a tree and fell it to the left or to the right. After that it occupies one of the segments [xi - hi, xi] or [xi;xi + hi]. The tree that is not cut down occupies a single point with coordinate xi. Woodcutters can fell a tree if the segment to be occupied by the fallen tree doesn't contain any occupied point. The woodcutters want to process as many trees as possible, so Susie wonders, what is the maximum number of trees to fell.

Input

The first line contains integer n (1 ≤ n ≤ 105) — the number of trees.

Next n lines contain pairs of integers xi, hi (1 ≤ xi, hi ≤ 109) — the coordinate and the height of the і-th tree.

The pairs are given in the order of ascending xi. No two trees are located at the point with the same coordinate.

Output

Print a single number — the maximum number of trees that you can cut down by the given rules.

Examples
input
51 22 15 1010 919 1
output
3
input
51 22 15 1010 920 1
output
4
Note

In the first sample you can fell the trees like that:

  • fell the 1-st tree to the left — now it occupies segment [ - 1;1]
  • fell the 2-nd tree to the right — now it occupies segment [2;3]
  • leave the 3-rd tree — it occupies point 5
  • leave the 4-th tree — it occupies point 10
  • fell the 5-th tree to the right — now it occupies segment [19;20]

In the second sample you can also fell 4-th tree to the right, after that it will occupy segment [10;19].


一道贪心的题目,最左边的树肯定可以往最左边倒,最右边的树一定可以往最右边倒,所以只要从最左开始扫描,只要可以往左倒就往左倒,否则往右倒,如果两边都不行,就不倒,可以先让最左的树往左到,最右的树向右倒,然后扫描第1到第N-2棵树,也可以设定一个很大的数,从左到右开始扫描,然而可能会被坑。

#include <bits/stdc++.h>using namespace std;#define MOD 1000000007#define inf 0x7f7f7f7f#define ll long long#define ull unsigned long longconst int MAXN = 1e5+5;typedef struct{    int pos,high;}Tree;int main(){    Tree tree[MAXN];    int n;    cin >> n;    for(int i=1;i<=n;i++)        cin >> tree[i].pos >> tree[i].high;    tree[0].pos=-inf;    tree[n+1].pos=inf;    int ans=0;    for(int i=1;i<=n;i++)    {        if(tree[i].pos-tree[i].high>tree[i-1].pos)//left        {            ans++;            continue;        }        if(tree[i].pos+tree[i].high<tree[i+1].pos)//right        {            tree[i].pos+=tree[i].high;            ans++;        }    }    cout << ans << endl;    return 0;}
最开始我将inf设定为了0x3f3f3f3f,然后WA on test 64了,看了测试样例才发现,最后一棵树的坐标和高度都是1e9, 所以如果这棵树向右倒,2*1e9就大于了设定的0x3f3f3f3f=‭1061109567‬,所以就WA了WA了WA了,改成了0x7f7f7f7f之后就AC了,果然人生处处是惊喜。




原创粉丝点击