Ciao, volevo chiedere maggiori informazioni sul testo di orderly evacuation. Di per sé mi sembra abbastanza chiaro, tuttavia anche in gara non ero riuscito a fare il subtask 3 in cui si presuppone che il piano di fuga sia una linea: (Ei != Ej for each i, j = 0 . . . N − 1). Siccome mi era rimasto il dubbio di dove fosse il problema ho provato a scrivere un codice ad hoc che risolva questo terzo task. La logica è la seguente: creo un vettore di strutture che tengono a mente l’arroganza, la ‘direzione’ E, e l’indice in cui inizialmente si trovano visto che è quello che poi va stampato. Le ordino in ordine crescente per E e successivamente le stampo nel nuovo ordine.
#include <stdio.h>
#include <assert.h>
#define MAXN 1000000
typedef struct Elem{
int A;
int E;
int i;
}Elemtype;
// funzione di sort
typedef int CmpFunType(const void *, const void *);
int StructCrescente(const Elemtype *v1, const Elemtype *v2){
return (v1->E > v2->E) - (v2->E > v1->E);
}
// input data
int N, i;
int E, A;
Elemtype W[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("%d", &N));
for(i=0; i<N; i++){
assert(1 == scanf("%d", &E));
W[i].E = E;
}
for(i=0; i<N; i++){
assert(1 == scanf("%d", &A));
W[i].A = A;
W[i].i = i;
}
qsort(W, N, sizeof(W[0]), (CmpFunType *)StructCrescente);
// print the result
printf("0 ");
for(i=0; i<N-1; i++) if(W[i].i!=0)printf("%d ", W[i].i);
printf("%d\n",W[N-1].i);
return 0;
}
Detto ciò in locale su piccoli esempi mi funziona, il che supponendo che il codice funzioni effettivamente mi lascia pensare a una qualche misinterpretazione del testo da parte mia che però non riesco a cogliere. Dove ho sbagliato? Grazie in anticipo.