È da un po’ di tempo che sto cercando di risolvere police 3, ho provato diversi approcci ma non riesco a pensare a un efficace risoluzione. Una cosa che non riesce a gestire il mio codice è quando incontra un valore con a sinistra uno più piccolo e a destra uno più grande, non avevo voglia di scrivere un altro if anche perchè penso che potrei scrivere un codice un po’ più semplice. Comunque questo è il risultato a cui sono arrivato, se sapete una strada migliore per favore illuminatemi.
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main(){
ifstream in("input.txt");
ofstream out("output.txt");
long long N=0;
long long amount=0;
bool skipnext=0;
in>>N;
vector <int> t(N);
vector <bool> skip(N);
for(int i=0; i<N; i++){
in>>t[i];
}
for(int i=0; i<N; i++){
if(i==0){
if(t[i]>=t[i+1]){
skip[i]=1;
skipnext=1;
continue;
}
}else if(i==N-1){
if(t[i]>=t[i-1] && skipnext==0){
skip[i]=1;
}
}else{
if(skipnext==0 && (t[i]>=t[i-1] && t[i]>=t[i+1])){
skip[i]=1;
skipnext=1;
continue;
}
}
skipnext=0;
}
for(int i=1; i<N; i++){
if(skip[i-1]==1 && skip[i]==1){
if(t[i-1]>=t[i]){
skip[i]=0;
}else if(t[i-1]<t[i]){
skip[i-1]=0;
}
}
//amount+=t[i];
}
for(int i=0; i<N; i++){
if(skip[i]==0){
amount+=t[i];
}
cout<<skip[i]<<" ";
}
out<<amount;
return 0;
}