codeforces B. Xenia and Spies 解题报告

本文解析 CodeForces 342/B 题目,介绍了一个涉及信息传递模拟的问题,特别关注如何在指定的限制条件下将信息从一个间谍传递到另一个间谍。代码示例使用 C++ 实现,并详细解释了核心逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:http://codeforces.com/problemset/problem/342/B

题目意思:有n个spy,编号从1~n,从左到右排列。现在的任务是,spy s要把信息传递到spy f,但必须要满足:当spy li ~ spy ri 被观看时,这一段spy不能传递信息。

     要注意的是,step数(也就是ti)不一定是按顺序排列下来的,它有可能与上一行的step相差好几轮。此时,这好几轮中,spy s 是可以继续往spy f的方向传递信息的,直到移动完这好几轮的数目为止。除此,有可能m未完全输出完,spy s已经把信息传到spy f 中了;还有编号为 s 的spy编号有可能比spy f的编号小, 这些都是需要考虑的。

     模拟题,考的就是细心,还有考虑周全!!!

    

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int n, m, s, f;
 9     while (scanf("%d%d%d%d", &n, &m, &s, &f) != EOF)
10     {
11         int move = (s > f ? -1 : 1);   // 记录是往左移还是往右移
12         int current, l, r;
13         int next = 1;  // next的设置很重要,它关乎到当前step和上一行的step间隔多少来处理消息的移动
14         current = 0;
15         while (s != f)
16         {
17             if (current < next && m > 0)
18             {
19                 scanf("%d%d%d", &current, &l, &r);
20                 m--;
21             }
22             if (current == next && ((s >= l && s <= r) || s + move >= l && s + move <= r))  // "||"后面的条件容易遗忘,它表示当移动一步后是否处于被看的序列中,如果是则不能移动
23                 printf("X");
24             else 
25             {
26                 printf("%c", s > f ? 'L' : 'R'); 
27                 s += move;
28         //        printf("s = %d\n", s);
29             }
30             next++;
31     //        printf("\ncurrent = %d, next = %d\n", current, next);
32         }
33         while (m--)   // 未到达m行,消息已经成功传递到spy f中,此时要继续执行到m行为止
34             scanf("%d%d%d", &current, &l, &r);
35         printf("\n");
36     }
37     return 0;
38 }

 

转载于:https://www.cnblogs.com/windysai/p/3351387.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值