Aiuto su gamble

In gamble riesco a fare 70/100 nel subtask 2 l’ultimo test fa “execution time out” come anche quasi tutti i test del subtask 6. Potete darmi qualche consiglio?
Questo è il codice:

#include <stdio.h>
#include <assert.h>

int N, K;


int minimo(int* v)
{
	int i, min=v[0], pos=0;
	
	for(i=1;i<K;i++)
	{
		if(v[i]<min)
		{
			min=v[i];
			pos=i;
		}
	}
	return pos;
}


int round(int C, int* vet)
{
    int i, posto, somma=0;
    
    posto=minimo(vet);
    if(C>vet[posto])
    {
		vet[posto]=C;
	}
	for(i=0;i<K;i++)
	{
		somma=somma+vet[i];
	}
    return somma;
}

int main() {
    FILE *fr, *fw;
    int C, i;

    fr = fopen("input.txt", "r");
    fw = fopen("output.txt", "w");
    assert(2 == fscanf(fr, "%d %d", &N, &K));
    
    int vet[K];
    
    for(i=0;i<K;i++)
    {
		vet[i]=0;
	}
    for(i=0; i<N; i++) {
        assert(1 == fscanf(fr, "%d", &C));
        fprintf(fw, "%d ", round(C, vet));
    }
    fprintf(fw, "\n");
    fclose(fr);
    fclose(fw);
    return 0;
}

Io proverei a lavorare su come memorizzi le carte in mano. Non c’è un modo di ottenere il minimo senza scorrere tutto l’array?
Anche la somma può essere ottimizzata, invece di ricalcolarla da zero ogni volta ad ogni mano aggiorna la somma della mano precedente sulla base della nuova carta e di quella eliminata.

Dario

1 Mi Piace

Prova a utilizzare le priotity queue per salvare la mano

2 Mi Piace