Sto cercando di completare il problema Montagne Russe ma c’è solo un caso nel subtask 3 che mi da errato (subcase 011).
Il codice è questo:
#include <stdio.h>
#include<iostream>
#include <assert.h>
#define MAXN 100000
int test(int n, int h[]) {
bool incidente=false;
bool salita=false;
int cima=h[0], i=0, j;
for(i=0; i<n-1&&!incidente; i++){
if(h[i]<=h[i+1]){
salita=true;
int diff=h[i+1]-h[i];
if(diff==h[i+2]-h[i+1] && diff!=0 && i<n-2){
for(j=i+2; diff==h[j+1]-h[j] && j<n-1; ){
j++;
}
i=j;
cima=h[i];
if(h[i+1]>=h[i] && i<n-1){
incidente=true;
}
}else if(h[i+1]>=cima){
incidente=true;
}
}else{
if(salita==true){
salita=false;
cima=h[i-1];
}
}
}
if(incidente==false && i!=n)
return i;
return i-1;
}
int H[MAXN];
int main() {
FILE *fr, *fw;
int N, i;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
assert(1 == fscanf(fr, "%d", &N));
for(i=0; i<N; i++)
assert(1 == fscanf(fr, "%d", &H[i]));
fprintf(fw, "%d\n", test(N, H));
fclose(fr);
fclose(fw);
return 0;
}
ho usato il template