Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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개의 입력이 있습니다. -

  • 감독관이 주어진 범위에서 감시하는 총 시간입니다.

  • 가장 왼쪽에 있는 범위에서 감독관이 지켜보고 있습니다.

  • 가장 오른쪽에 있는 범위인 감독자가 보고 있습니다.

"Left", "Right", "Keep"이라는 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++ 코드와 함께 감독자에게 잡히지 않고 할당을 전달하는 방법을 찾는 알고리즘을 작성하는 방법을 배웠습니다. 우리는 또한 자바, 파이썬 및 기타 언어로 이 코드를 작성할 수 있습니다. 위의 알고리즘은 경쟁 코딩 대회에서 중요한 알고리즘입니다. 이 질문에는 C++ 코드를 통해 해결한 실생활 문제가 포함되어 있습니다. 이 튜토리얼이 도움이 되기를 바랍니다.