Worst exam ever 20/100

ciao tutti, ho provato a fare questo esercizio: “worst exam ever” mi fuanziona soltanto con i test case 5 e 6, questo è il codice:

//Esercizio 124-Worst exam ever
#include<iostream>
#include<stdlib.h>
#include<fstream>
using namespace std;
int main()
{
	fstream fin,fout;
	fin.open("input.txt",ios::in);
	fout.open("output.txt",ios::out);
	long long int n,ind=0,i=1;
	double si,pi,rap;
	fin>>n;
	fin>>si;
	fin>>pi;
	rap=si/pi;
	ind=1;
	while(i<n)
	{
		fin>>si;
		fin>>pi;
		if(rap>si/pi)
		{
			rap=si/pi;
			ind=i;
		}
		i++;
	}
	fout<<ind;
	fin.close();
	fout.close();
}

Come mai riesce solamente in questi due casi?
Grazie in anticipo a chi riuscirà ad aiutarmi!

Alla fine del testo del problema, c’è un riquadro rosso che, in questo contesto, sconsiglia l’utilizzo delle floating-point variables perché potrebbero portare ad errori di precisione.

E’ anche spiegato, in modo dettagliato, come fare per non utilizzarle!

Non sono le variabili double il problema, quelle sono abbastanza precise, c’è una falla nell’algoritmo.

prova questo testcase:
3
10 10
1 2
10001 20000

il codice sopra stampa l’indice 1, quando è chiaro che devi rimuovere l’ultimo esercizio, per ottenere il punteggio finale massimo.

prova a ragionare di più sul rapporto (Tot_fatti - S[i])/(Tot_possibili - P[i]), in fondo è questo che determina il risultato finale :wink: