题意:给定 n 个间谍,m个区间,一个 s,一个f,然后从 s开始传纸条,然后传到 f,然后在每个 t 时间在区间内的不能传,问你最少的时间传过去。
析:这个题,就模拟一下就好,贪心策略,能传就传,找好方向,一直传就行,传到 f 就结束。
代码如下:
#include <bits/stdc++.h> using namespace std; struct node{ int l, r, t; bool operator < (const node &p) const{ return t < p.t; } }; node a[100005]; int main(){ int s, t, m, n, f, l, r; while(cin >> n >> m >> s >> f){ bool ok = false; int x = f > s ? 1 : -1; int pos = s; for(int i = 0; i < m; ++i){ scanf("%d %d %d", &a[i].t, &a[i].l, &a[i].r); } // sort(a, a+m); int cnt = 0; for(int i = 1; ; ++i){ if(a[cnt].t == i){ if((pos + x < a[cnt].l && pos < a[cnt].l) || (pos + x > a[cnt].r && pos > a[cnt].r)){ printf("%c", x < 0 ? ‘L‘ : ‘R‘); pos += x; } else printf("X"); if(pos == f) break; ++cnt; }else{ pos += x; printf("%c", x < 0 ? ‘L‘ : ‘R‘); if(pos == f) break; } } printf("\n"); } return 0; }
时间: 2024-10-18 13:58:43