Aiuto bonus OIS

Salve a tutti, non riesco a capire il perchè sono fermo a 20 punti sul problema bonus, semplicemente conservo l’indice della frazione minima e moltiplico a incrocio con la i-esima frazione, cosi mi trovo il minimo tra le frazioni e scarto quella, ma su molti testcase da wrong output.

#include <stdio.h>
#include <assert.h>
#include <iostream>
// constraints
#define MAXN 100000

// input data
long long N, i;
long long S[MAXN], P[MAXN];

int main() {

//  uncomment the following lines if you want to read/write from files
  freopen("input.txt", "r", stdin);
//  freopen("output.txt", "w", stdout);

    assert(1 == scanf("%lld", &N));
    for(i=0; i<N; i++) {
        assert(1 == scanf("%lld", &S[i]));
        assert(1 == scanf("%lld", &P[i]));
    }
    long long int calc1;
    long long int calc2;
    long long int indicemin=0;
    for (i=1; i<N; i++) {
        calc1=S[indicemin]*P[i];
        calc2=S[i]*P[indicemin];
        if (calc1>calc2){
            indicemin=i;
        }
    }

    printf("%lld\n", indicemin); // print the result
    return 0;
}

Non sempre trovare la frazione minore porta ad una soluzione corretta.
Per esempio se le frazioni fossero 1/1, 2/2, 1/10 e 3/20, quella minore è ovviamente 1/10 ma togliendo questa si ottiene 6/23, che è minore rispetto a 4/13 che si otterrebbe togliendo 3/20.
Basta seguire il testo: non chiede di trovare la frazione minore, ma quella che tolta dalla somma dei punti fatti / somma dei punti possibili abbia il risultato massimo. C’è da fare esattamente questo.

1 Mi Piace

Grazie mille, avevo calcolato che togliendo la frazione minima avrei automaticamente ottenuto la sottosequenza con somma massima, ma non è cosi