题型:贪心
题意:
有n个人站在一条线上,先要将一个东西从从s人手里传到f人手里,每一秒可以传给相邻的一个人,在t[i]时间,有from[i]到to[i]區間内的人会被监视,被监视的人不能传递和接受东西,在第t[i]秒时,手上握有纸条的人,可以选择不传或者往左往右传,请问要怎么传才可以最快将纸条从第s个人传到第f个人手上。
分析:
直接按时间贪心走,能传就传,不能传就不传。若s在f左边就一直往右传,否则一直往左串,不存在s和f是一个人的情况。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define maxn 123456
using namespace std;
int t[maxn],from[maxn],to[maxn];
int main(){
int num,n,s,e;
while(~scanf("%d%d%d%d",&num,&n,&s,&e)){
for(int i=0;i<n;i++){
scanf("%d%d%d",&t[i],&from[i],&to[i]);
}
bool flag=false;
if(s<e){
int a=0,i=0;
while(!flag){
a++;
if(a<t[i]){
s++;
printf("R");
}
else{
if(s<from[i]-1 || s>to[i]){
s++;;
printf("R");
}
else{
printf("X");
}
i++;
}
if(s==e){
flag=true;
}
}
}
else{
int a=0,i=0;
while(!flag){
a++;
if(a<t[i]){
s--;
printf("L");
}
else{
if(s<from[i] || s>to[i]+1){
s--;
printf("L");
}
else{
printf("X");
}
i++;
}
if(s==e){
flag=true;
}
}
}
printf("\n");
}
return 0;
}