迷宫大门
【题目描述】
在跳棋游戏大获全胜后,小明就开始一个人在校园里溜达了。突然他在校园角落里发现了一面神奇的墙壁,墙壁上有一排钉子,每个钉子上都挂着一根两端系有小球的绳子,如下图所示
小明可以调整每一根绳子在钉子左右两端的长度,当来自不同绳子的相邻小球高度一样时(具体可见样例说明),便可获得积分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; }