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