C++ 中的作业传递


在本教程中,我们必须编写一个算法来找到一种方法,在不被监考老师发现的情况下通过作业。每个学生都必须将他们的作业提交给监考老师。学生 A 的作业在学生 B 那里,所以学生 B 必须在不被监考老师注意到的情况下将作业还给/传递给学生 A。

所有学生都排队坐着。我们需要找到一种方法将作业传递回学生 A 而不被发现。他们可以传递作业的各种要求如下:

  • 学生 A(位于索引 i 处)可以将其作业传递给其邻居,即索引 (i-1) 和 (i+1) 处的学生。

  • 学生可以给出、接收或保留他们手中的作业。

  • 监考老师正在监视从索引 [il, rl] 开始的所有学生。

  • 当学生在监考老师的监视范围内时,他们不能发送或接收作业。

  • 如果学生在该范围内保留了作业,监考老师将不会发现他们。

我们得到四个输入 p、q、r、s,其中 p 是学生的总数,q 是监考老师从 il 到 rl 监视的总步数,c 是学生 A 的位置,d 是学生 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 <bits/stdc++.h>
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 < q && tim == t[i]) {
         if ((current >= l[i] && current <= ar[i]) ||
         (current + dir >= l[i] && current + dir <= ar[i])) {
            answer += "Keep\n";
            tim++;
            i++;
            continue;
         }
         i++;
      }
      current += dir;
      answer += val+"\n";
      tim++;
      if (current == s)
         break;
   }
   cout << answer << endl;
}
int main(){
   int p = 8, q = 3, r = 2, s = 7;
   long t[q + 2] = { 1,2,3 };
   int l[q + 2] = { 4,1,5 };
   int ar[q + 2] = { 6,8,6 };
   solve(p, q, r, s, t, l, ar);
   return 0;
}

输出

Right
Keep
Right
Right
Right
Right

结论

在本教程中,我们学习了如何编写算法来找到一种方法,在不被监考老师发现的情况下传递作业,以及 C++ 代码。我们也可以用 Java、Python 和其他语言编写此代码。上述算法对于竞争性编码竞赛来说是一个重要的算法。这个问题包含了一个现实生活中的问题,我们通过 C++ 代码解决了它。我们希望您发现本教程有所帮助。

更新于:2022年3月7日

107 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.