Giả sử có N trạm trên đường thẳng. Mỗi chúng đều có công suất bức xạ không âm như nhau. 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