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

C++에서 각 방사 스테이션의 최종 방사 찾기

<시간/>

직선에 N개의 역이 있다고 가정합니다. 그들 각각은 동일한 음이 아닌 방사선 전력을 가지고 있습니다. 모든 스테이션은 다음과 같은 방법으로 인접 스테이션의 방사 전력을 증가시킬 수 있습니다.

방사선 전력이 R인 스테이션 i가 (i – 1) 스테이션의 방사선 전력을 R-1만큼 증가시키고 (i - 2) 스테이션의 방사선 전력을 R-2만큼 증가시키고 (i + 1) 스테이션의 방사선 전력을 증가시킨다고 가정합니다. R-1에 의한 방사 전력, R-2에 의한 (i + 2)번째 스테이션의 방사 전력. 곧. 예를 들어 배열이 Arr =[1, 2, 3]과 같으면 출력은 3, 4, 4가 됩니다. 새 복사는 [1 + (2 – 1) + (3 – 2), 2 + (1 – 1) + (3 – 1), 3 + (2 – 1)] =[3, 4, 4]

아이디어는 간단합니다. 각 스테이션 i에 대해 위에서 언급한 대로 인접 스테이션의 복사가 증가하여 유효 복사가 음수가 될 때까지입니다.

예시

#include <iostream>
using namespace std;
class pump {
   public:
      int petrol;
      int distance;
};
int findStartIndex(pump pumpQueue[], int n) {
   int start_point = 0;
   int end_point = 1;
   int curr_petrol = pumpQueue[start_point].petrol - pumpQueue[start_point].distance;
   while (end_point != start_point || curr_petrol < 0) {
      while (curr_petrol < 0 && start_point != end_point) {
         curr_petrol -= pumpQueue[start_point].petrol - pumpQueue[start_point].distance;
         start_point = (start_point + 1) % n;
         if (start_point == 0)
            return -1;
      }
      curr_petrol += pumpQueue[end_point].petrol - pumpQueue[end_point].distance;
      end_point = (end_point + 1) % n;
   }
   return start_point;
}
int main() {
   pump PumpArray[] = {{4, 6}, {6, 5}, {7, 3}, {4, 5}};
   int n = sizeof(PumpArray)/sizeof(PumpArray[0]);
   int start = findStartIndex(PumpArray, n);
   if(start == -1)
      cout<<"No solution";
   else
      cout<<"Index of first petrol pump : "<<start;
}

출력

Index of first petrol pump : 1