Aiuto con gasoline 90/100

Buongiorno, stavo cercando di risolvere il problema gasoline, ma riesco ad arrivare solo a 90/100.
Vedendo i punteggi delle subtask l’unico modo possibile per cui la sottoposizione restituisca 90/100 è dato da una subtask base che conferisce solo 10 punti.
Ce ne sono 3 di questo tipo, ma facendo i dovuti test mi sembra che mi vengano tutte. Giuro che non riesco a capire dove sbaglio.

Qualcuno potrebbe darmi una mano?

#include <iostream>

#include <vector>

using namespace std;

int stazioneEconomica(int pos, vector<int> P, int N) {

  if (pos == N - 2) {

    if (P[pos] > P[N - 1])

      return N - 1;

    else

      return pos;

  }

  for (int i = pos + 1; i < N; i++) {

    if(P[pos] > P[i])

      return i;

  }

  return pos;

}

uint64_t distanzaStazioni(int s1, int s2, vector<int> G, int N) {

  uint64_t distanza = 0;

  if(s1 == s2) {

    if(s1 == N - 1)

      return G[s1];

    else {

      for(int i = s1; i < N; i++)

        distanza += G[i];

      return distanza;

    }

  } else{

    for(int i = s1; i < s2; i++)

        distanza += G[i];

    return distanza;

  }

}

int main() {

  freopen("input.txt", "r", stdin);

  freopen("output.txt", "w", stdout);

  int N;

  cin >> N;

  vector<int> P(1000000), G(1000000);

  for (int i = 0; i < N; i++) {

    cin >> P[i];

  }

  for (int i = 0; i < N; i++) {

    cin >> G[i];

  }

  uint64_t litri = 0, costo = 0;

  int posizione = 0, i = 0;;

  do {

    i = stazioneEconomica(posizione, P, N);

    litri = distanzaStazioni(posizione, i, G, N);

    costo += litri * P[posizione];

    if (i == posizione)

      posizione = N;

    else

      posizione = i;

  } while (posizione < N - 1);

  cout << costo;

  

  return 0;

}

Ciao, ricordati che l’ultima stazione (Pordenone) non è quella in posizione N-1 ma in posizione N, quindi basta che modifichi la condizione da while(posizione < N-1) a while(posizione < N)

Grazie mille, adesso funziona!