在本教程中,我们必须编写一个算法来找到一种在不被监考人员发现的情况下通过作业的方法。每个学生都必须向监考人员提交作业。学生 A 的作业是交给学生 B 的,因此学生 B 必须在监考人员注意到的情况下将作业返回/传递给学生 A。
所有学生都坐在队列中。我们需要找到一种方法将作业传回给学生A而不被抓住。他们可以通过作业的各种要求如下 -
-
学生 A(在索引 i 处)可以将作业传递给位于索引处的邻居(i- 1) 和 (i+1)
-
学生可以提交、接受或保留作业。
-
监考人员正在监视索引[il, rl]中的所有学生。
-
当学生在监考人员监视范围内时,他们无法发送或接收作业。
-
当学生处于监考人员监视范围内时,他们无法发送或接收作业。 p>
-
如果学生在该范围内保留作业,监考人员不会发现他们。
我们是给定四个输入 p、q、r、s,其中 p 是学生总数,q 是监考员从 il 到 rl 进行监视的总步数,c 是学生 A 的位置,d 是学生 A 的位置。学生 B 的位置。
每个步骤 (q) 有三个输入 -
-
监考人员监视的总时间给定的范围。
-
在最左边的包含范围内,监考人员正在观看。
-
在最右边的包含范围内,监考人员正在观看。 ,正在观看。
需要 3 个单词的输出序列:“左”、“右”和“保持”,表示学生的活动(如果他们正在观看)通过作业(左/右)或保留它。例如,
步骤
输入
8 3 2 7
1 4 6
2 1 8
3 5 6
登录后复制
输出
Right
Keep
Right
Right
Right
Right
登录后复制登录后复制
解释
按照这些说明,作业将从索引 2 的学生传到索引 7 的学生,而不会被捕获。
输入
5 1 1 3
1 2 5
登录后复制
输出
Keep
Right
Right
登录后复制
解释
按照这些说明,作业将从索引 1 的学生传到索引 3 的学生,而不会被捕获。
接近找到解决方案
在给定实例中,如果监考人员在该范围内监视,无论是当前正在做作业的学生还是要向其发送作业的学生,那么该学生将保留和他一起完成那个任务。否则,他将球传给最终目标方向的相邻学生。
示例
#include
using namespace std;
void solve(int p, int q, int r, int s,
long t[], int l[], int ar[]){
int dir;
string val;
if (r < s) {
dir = 1;
val = "Right";
} else {
dir = -1;
val = "Left";
}
string answer = "";
int i = 0, current = r;
long tim = 1;
while (1) {
if (i = l[i] && current = l[i] && current + dir