Problema "Gym Music"

Ciao, non riesco a trovare un input dove il mio codice fallisca, eppure Olinfo mi dice che quasi metà degli output sono sbagliati.

#include <bits/stdc++.h>

using namespace std;

int main() {

    int N;
    
    cin >> N;
    
    vector<int>V(N);
    
    for (int i=0; i<N; i++){
    
        cin >> V[i];
    
    }
    
    vector<int>prova(N+1);
    
    for (int i=1; i<N; i++){
    
        prova[i]=max(0, V[i-1]-V[i]);
    
    }
    
    prova[0]=0;
    
    prova[N]=0;
    
    vector<int>pronza(N);
    
    for (int i=1; i<N-1; i++){
    
        pronza[i]=max(V[i-1]-V[i+1], 0);
    
    }
    
    pronza[0]=0;
    
    pronza[N-1]=0;
    
    vector<int>def(N);
    
    for (int i=0; i<N; i++){
    
        def[i]=-pronza[i]+prova[i]+prova[i+1];
    
    }
    
    int masx=0;
    
    for (int i=0; i<N; i++){
    
        if (def[i]>def[masx]){masx=i;}
    
    }
    
    V.erase(V.begin()+masx);
    
    int ris=0;
    
    for (int i=1; i<N-1; i++){
    
        ris+=max(0, V[i-1]-V[i]);
    
    }
    
    cout << ris;

}

Avreste delle idee?

1 Mi Piace

Eccoti un caso in cui fallisce la tua soluzione.

8
1000000000 1 1000000000 1 1000000000 1 1000000000 1

Il problema è l’overflow di ris.

Oh, che skill issue, grazie mille!

1 Mi Piace