Nanga c++ #olimpiadi

Non riesco a capire cosa ci sia di sbagliato nel codice(ricevo 21/100). Grazie in anticipo a chi mi aiuterà

#include <iostream>
#include<string>
#include<fstream>
using namespace std;
int main(){
	ifstream in;
	ofstream ou;
	in.open("input.txt");
	int n;
	in>>n;
	int rilevazioni[n],array[n];
	for(int i=0;i<n;i++){
		in>>rilevazioni[i];
		array[i]=0;
	}
	for(int i=1;i<n;i++){
		rilevazioni[i]+=rilevazioni[i-1];
	}
	for(int i=0;i<n;i++){
		for(int z=i+1;z<n;z++){
			if(rilevazioni[i]==rilevazioni[z])
				array[i]++;
		}
	}
	int maggiore=0;
	for(int i=1;i<n;i++){
		if(array[i]>array[i-1])
			maggiore=i;
	}
	rilevazioni[maggiore]+=5000;
	ou.open("output.txt");
	ou<<rilevazioni[maggiore];
	return 0;
}

Non ho capito che fai, ma leggendo il codice ho notato che in questa parte non confronti il maggiore ma il precedente:

Scrivendo maggiore al posto di i-1 il codice fa 94.74

for(int i = 1; i < n; i++) {
    	if(array[i] > array[maggiore])
      	maggiore = i;
 }

Per far 100/100 ti ricordo che anche l’altezza di partenza è stata rilevata, ma tu non la consideri.

2 Mi Piace

La considero invece, alla fine del codice

La consideri come altezza, non come ripetizione.

Hm, ho provato a cambiare ma dà lo stesso risultato

In che senso come ripetizione?

In pratica il primo 5000 è un valore rilevato.
Penso che il tuo codice sbagli:

4
2 0 -2 0

Secondo il tuo algoritmo le altezze rilevate sono 5002,5002,5000,5000 quando in realtà esiste anche il primo 5000, quindi dovrebbero essere: 5000,5002,5002,5000,5000

4 Mi Piace

Hm, capisco, grazie, ora provo

Restituisce sempre 21/100 :confused:

Quello da 94:

#include <bits/stdc++.h>

using namespace std;
int main() {
	ifstream in;
  	in .open("input.txt");
  	int n; 
	in >> n;
 	int rilevazioni[n], array[n];
 	for(int i = 0; i < n; i++) { 
	 	in >> rilevazioni[i];
    	array[i] = 0;
	}
	
  	for(int i = 1; i < n; i++) {
    	rilevazioni[i] += rilevazioni[i - 1];
  	}
  	
  	for(int i = 0; i < n; i++){
    	for(int z = i + 1; z < n; z++) {
    		if(rilevazioni[i] == rilevazioni[z])
       			array[i]++;
    	}
  	}
  	
  	int maggiore = 0;
  	int b = 0;
  	for(int i = 1; i < n; i++) {
    	if(array[i] > array[maggiore])
      	maggiore = i;
  	}
  	rilevazioni[maggiore] += 5000;
  	ofstream ou;
  	
 	 ou.open("output.txt");
 	 ou << rilevazioni[maggiore];
	  return 0;
}

Ma la b a cosa serve?

A niente XD
L’ ho dichiarata per iniziare a debbuggare ma poi mi sono accorto che non tenevi il maggiore salvato.

1 Mi Piace

E perché non dà 100/100?

Quello che ti ho mandato è il tuo codice con la correzione del massimo.
Deve ancora essere considerato il primo 5000 come ripetizione.

1 Mi Piace

Grazie mille:relieved:

1 Mi Piace