Aiuto per blindpunch

Ciao, sono giorni che cerco di risolvere blindpunch, ma il massimo che riesco ad ottenere è 0/100 con la metà dei test case giusti.
L’idea alla base del codice è che creo un multiset di struct in cui salvo la probabilità attuale di uccidere l’insetto, la probabilità iniziale e il numero di ciabatte che ho già tirato. Il set è ordinato in ordine decrescente in base alla probabilità attuale di uccidere l’insetto.
Grazie in anticipo per qualsiasi aiuto.

#include <assert.h>
#include <math.h>
#include <stdio.h>
#include <set>
#include <iostream>


// constraints
#define MAXN 200000
using namespace std;

// input data

struct insetti
{
    long double attuale, iniziale, ciabatte;

    bool operator< (const insetti& r) const
    {
        return attuale>r.attuale;               //in modo da ordinare il multiset in ordine crescente
    }
};

int T, N, K, i, j;
long double prob[MAXN]; //array

multiset<insetti> set_prob;



long double scegli(int K);

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("%d", &T));
    for(i=0; i<T; i++) {
        assert(2 == scanf("%d %d", &N, &K));
        for(j=0; j<N; j++)
        {
            long double a;
            insetti c;
            assert(1 == scanf("%Lf", &a)); 
            c.iniziale=a;
            c.attuale=a;
            c.ciabatte=0;
            //cout << "attuale: " << c.attuale << " iniziale: " << c.iniziale << " ciabatte: " << c.ciabatte << endl; 
            set_prob.insert(c);     //l'inizializzazione del set è corretta
                                    //ordinato dal più grande al più piccolo
        }
    
        // insert your code here

        long double result = scegli(K);
        


        result = floor(result * 1000000) / 1000000; //NON TOCCARE
        printf("%.6Lf\n", result);
    
    }

    return 0;
}

long double scegli(int K)
{
    long double risultato=0;
    

    while(K>0)
        {
            insetti max = *set_prob.begin();                //insetto con la prob attuale massima
            insetti cambio = max;                           //insetto che uso per aggiornare il valore attuale del numero massimo
            
            risultato+=max.attuale;
            cambio.ciabatte++;
            cambio.attuale=((cambio.iniziale)*pow((1-cambio.iniziale), cambio.ciabatte));
            
            set_prob.erase(set_prob.begin());               //multiset quindi elimino solo l'elemento più grande
            set_prob.insert(cambio);
            
            K--;
        }


    return risultato;
}

Ciao! Ti sei dimenticato di pulire set_prob all’inizio di ogni test case :upside_down_face:

Mamma mia era una settimana che andavo avanti su questo problema, grazie!

1 Mi Piace