Salve,
per allenarmi in vista delle olimpiadi di Informatica ho fatti vari problemi ma in quello “Aggiornamento della macchina virtuale” (vm), non riesco a capire dove sta il mio errore siccome quando lo compilo dal sito mi da 61/100.
Il problema in questione chiede di trovare il numero massimo di aggiornamenti (che per me è la variabile cont) affinché ogni versione del programma (A[i]) sia la versione più alta ma sempre minore o uguale a quella successiva (A[i+1]) e A[N-1] (N sta per quanti programmi ci sono) non potrà essere aggiornata.
Il programma quando si aggiorna aumenta a seconda del valore presente in B[i].
Quindi per fare un breve riassunto delle variabili:
-
L’ intero
Nrappresenta il numero di programmi nella macchina virtuale. -
L’ array
Acontiene le versioni iniziali dei programmi. In particolare, per ogni 0 ≤i≤N− 1,Aiindica la versione dell’i-esimo programma. -
L’array
Bindica di quante versioni alla volta si possono aggiornare i programmi.
In particolare, per ogni 0 ≤i≤N− 2,Biindica quanto aumentaAidopo un aggiornamento dell’
i-esimo programma.
Questo è il link del Probelma:
Aggiornamento della macchina virtuale
Questo è il codice:
#include <vector>
#include <iostream>
using namespace std;
long long aggiorna(int N, vector<int> A, vector<int> B)
{
int cont = 0, temp = 0;
for (int i = N - 2; i >= 0; i--)
{
if (B[i] == 1)
{
cont = cont + (A[i + 1] - A[i]);
A[i] = A[i + 1];
}
else
{
temp = A[i + 1] - A[i];
temp = temp / B[i];
A[i] += (B[i] * temp);
cont += temp;
}
}
return cont-N;
}
.