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.