cf中的B题,由于比赛时题意理解不到位,所以wrong了。
思路:
简单的贪心,受到监视的时候就输出‘X’,否则就朝目标位置挪动。
没有想到的地方就是m次审讯后还可以传递情报,(其实m次审讯只是在所有审讯中抽出的m次,)
代码如下:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#define M 100005
#define mod 1000000007
#define INF 0x7fffffff
#define eps 1e-8
#define LL long long
#define LLU unsigned long long
using namespace std;
int t[M], l[M], r[M];
int n, m, s, f, next;
int main ()
{
scanf("%d%d%d%d", &n, &m, &s, &f);
for(int i = 0; i < m; ++i)
scanf("%d%d%d", &t[i], &l[i], &r[i]);
int dir = s<f?1:-1;
for(int i = 0; i < m && s!=f; ++i)
{
int tt = (i==0?t[i]:t[i]-t[i-1]);
tt -= 1;
if((f-s)/dir<tt)
{
tt = (f-s)/dir;
s = f;
}
else
s += dir*tt;
for(int j = 1; j <= tt; ++j)
printf("%c", dir==1?'R':'L');
if(s==f) break;
next = s+dir;
if(next>=l[i]&&next<=r[i]||s>=l[i]&&s<=r[i])
printf("X");
else
{
printf("%c", dir==1?'R':'L');
s = next;
}
}
if(s!=f)
{
int tt = (f-s)/dir;
for(int j = 1; j <= tt; ++j)
printf("%c", dir==1?'R':'L');
}
printf("\n");
return 0;
}