Oggi mi trovo alle prese con il problema bilancio. Purtroppo la mia soluzione fa solo 80/100 e va in timeout nell’ultimo subtask. È da 3 ore che provo a ottimizzarla ma non sono arrivato ad una soluzione concreta
Questo è il mio codice attuale.
#include <stdio.h>
#include <assert.h>
#include <algorithm>
#define MAXN 1000000
using namespace std;
void bianchetta(int N, int K, int U[], int C[]) {
int Ci = 0;
int lastIndex = -1;
while (Ci < N - K) {
int minIndex = lastIndex + 1;
int end = min(lastIndex + 1 + K, N - (N - K - Ci));
for (int i = end; i > lastIndex; i--) {
minIndex = U[i] <= U[minIndex] ? i : minIndex;
}
C[Ci] = U[minIndex];
lastIndex = minIndex;
Ci++;
}
}
int U[MAXN], C[MAXN];
int main() {
FILE *fr, *fw;
int N, K, i;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
assert(2 == fscanf(fr, "%d%d", &N, &K));
for(i=0; i<N; i++)
assert(1 == fscanf(fr, "%d", &U[i]));
bianchetta(N, K, U, C);
for(i=0; i<N-K; i++)
fprintf(fw, "%d ", C[i]);
fprintf(fw, "\n" );
fclose(fr);
fclose(fw);
return 0;
}