题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2245
|
||||||
Description | ||||||
如图所看到的。Zoidtrip是一个休闲向小游戏……
|
||||||
Input | ||||||
多组測试数据。 每组測试数据第一行为两个正整数 n和v。 接下来n行,每行3个整数l[i] , r[i] , d[i]。 ( N <= 2000000。0 <= 全部数据 < 2^31 ) |
||||||
Output | ||||||
对于每组数据。输出一行,包括一个整数,代表最多前进至的层数。 | ||||||
Sample Input | ||||||
3 7 1 3 1 4 10 5 8 10 1 4 1 1 1 1 2 5 10 1 1 1 3 5 2 |
||||||
Sample Output | ||||||
2 4 |
||||||
Hint | ||||||
“第i层障碍物与第i-1层障碍物之间的距离为d[i]”
例子1解释例如以下: 我们能够出生位置向右下移动至第一层坐标为1的地方。接下来能够继续一直向右下移动至第二层坐标为6的地方。 但不管怎样也无法移动至第三层的8~10之间。
例子2说明例如以下: |
||||||
Source | ||||||
哈尔滨理工大学第五届ACM程序设计竞赛 |
PS:
把 三角胞在每一层能走到的且满足能避开障碍物的最左和最右的距离找出来!
代码例如以下:
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; #define LL long long #define maxn 2000047 LL l[maxn], r[maxn], d[maxn]; int main() { LL n, v; while(scanf("%lld%lld",&n,&v)!=EOF) { LL L = 0,R = 0; int ans = 0; for(int i=0; i<n; i++) { scanf("%lld%lld%lld",&l[i],&r[i],&d[i]); } for(int i = 0; i < n; i++) { if(l[i] > r[i]) { LL t = r[i]; r[i] = l[i]; l[i] = t; } L-=d[i]; R+=d[i]; L = max(l[i],L); R = min(r[i],R); if(L > R) { break; } ans++; } if(v == 0) ans = 0; printf("%d ",ans); } return 0; }