Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm bức xạ cuối cùng của mỗi Trạm bức xạ trong C ++

Giả sử có N trạm trên đường thẳng. Mỗi người trong số họ có cùng công suất bức xạ không âm. Mỗi trạm đều có thể tăng công suất bức xạ của các trạm lân cận theo cách sau.

Giả sử trạm thứ i với công suất bức xạ R, sẽ tăng (i - 1) công suất bức xạ của trạm thứ, bằng R-1, (i - 2) công suất bức xạ của trạm thứ R-2 và sẽ tăng (i + 1) trạm thứ công suất bức xạ bằng R-1, công suất bức xạ của trạm thứ (i + 2) bằng R-2. Sớm. Vì vậy, ví dụ, nếu mảng giống như Arr =[1, 2, 3], thì đầu ra sẽ là 3, 4, 4. Bức xạ mới sẽ là [1 + (2 - 1) + (3 - 2), 2 + (1 - 1) + (3 - 1), 3 + (2 - 1)] =[3, 4, 4]

Ý tưởng là đơn giản. Đối với mỗi trạm, tôi tăng bức xạ của các trạm lân cận như đã đề cập ở trên, cho đến khi bức xạ hiệu dụng trở thành âm.

Ví dụ

#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;
}

Đầu ra

Index of first petrol pump : 1