# Problema con un esercizio

**URL:** <https://forum.olinfo.it/t/problema-con-un-esercizio/6835>\
**Category:** Aiuto\
**Created:** [12 Dicembre 2021, 6:44pm UTC](https://forum.olinfo.it/t/problema-con-un-esercizio/6835 "2021-12-12T18:44:51Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![SIUMMMMMMM](https://forum.olinfo.it/user_avatar/forum.olinfo.it/siummmmmmm/32/847_2.png) [@SIUMMMMMMM](https://forum.olinfo.it/u/SIUMMMMMMM)\
**Post date:** [12 Dicembre 2021, 6:44pm UTC](https://forum.olinfo.it/t/problema-con-un-esercizio/6835/1 "2021-12-12T18:44:51Z")

</div>

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 aumenta `Ai` dopo un aggiornamento dell’  
`i`-esimo programma.

Questo è il link del Probelma:  
[Aggiornamento della macchina virtuale](https://training.olinfo.it/#/task/preoii_vm/statement)

Questo è il codice:

```auto
#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;
}

```

---

<div class="post-metadata">

**Author:** ![frakkiobello](https://forum.olinfo.it/user_avatar/forum.olinfo.it/frakkiobello/32/2768_2.png) [@frakkiobello](https://forum.olinfo.it/u/frakkiobello)\
**Post date:** [12 Dicembre 2021, 8:04pm UTC](https://forum.olinfo.it/t/problema-con-un-esercizio/6835/2 "2021-12-12T20:04:42Z")

</div>

Il codice che hai condiviso ottiene 0/100, togliendo il `- N` dal valore che ritorni (penso sia un typo) ottieni 61/100, per ottenere 100 devi dichiarare cont come `long long`.

---

<div class="post-metadata">

**Author:** ![SIUMMMMMMM](https://forum.olinfo.it/user_avatar/forum.olinfo.it/siummmmmmm/32/847_2.png) [@SIUMMMMMMM](https://forum.olinfo.it/u/SIUMMMMMMM)\
**Post date:** [12 Dicembre 2021, 8:14pm UTC](https://forum.olinfo.it/t/problema-con-un-esercizio/6835/3 "2021-12-12T20:14:27Z")

</div>

Si mi ero dimentica di togliere il -N, siccome non capivo dove era l’errore stavo provando a mettere cose a caso 😅.  
Comunque grazie per la risposta.
