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
N
rappresenta il numero di programmi nella macchina virtuale. -
L’ array
A
contiene le versioni iniziali dei programmi. In particolare, per ogni 0 ≤i
≤N
− 1,Ai
indica la versione dell’i
-esimo programma. -
L’array
B
indica di quante versioni alla volta si possono aggiornare i programmi.
In particolare, per ogni 0 ≤i
≤N
− 2,Bi
indica quanto aumentaAi
dopo 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;
}