迷宫大门

【题目描述】

在跳棋游戏大获全胜后,小明就开始一个人在校园里溜达了。突然他在校园角落里发现了一面神奇的墙壁,墙壁上有一排钉子,每个钉子上都挂着一根两端系有小球的绳子,如下图所示

 

小明可以调整每一根绳子在钉子左右两端的长度,当来自不同绳子的相邻小球高度一样时(具体可见样例说明),便可获得积分1分。当小明的方案获得最高积分时,迷宫大门就会开启,小明就可以进去寻找宝藏啦!

【输入】

输入文件door.in第一行为一个正整数n,表示墙上的绳子数。 接下来n行,每行2个整数a和b,表示绳子左右两端的初始长度。

【输出】

输出文件 door.out 仅有一个正整数,表示小明可以获得的最高积分。

【样例输入】

3

1 1

3 2

1 4

【样例输出】

2

【数据范围】

这里写图片描述

 

【代码】 

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>

#define RI        register int
#define re(i,a,b) for(RI i=a; i<=b; i++)
#define ms(i,a)   memset(a,i,sizeof(a))

using namespace std;

typedef long long ll;

int const N=500005;

int n,ans;
int a[N];

int main() {
    scanf("%d",&n);
    re(i,1,n) {
        int x,y;
        scanf("%d%d",&x,&y);
        a[i]=x+y;
    }
    int l=0,r=a[1];
    re(i,2,n) {
        if(a[i]<l) {
            l=0;
            r=a[i];
        } else {
            ans++;
            int t=r;
            r=a[i]-l;
            l=max(0,a[i]-t);
        }
    }
    cout << ans << endl;
    return 0;
}