Salve a tutti, dal momento che ho visto che 9 di voi hanno già risolto questo problema, ho pensato di chiedere una mano perchè non riesco ad ottenere oltre 25/100 in questo problema. La mia prima soluzione eseguiva semplicemente i cambiamenti di posto di tutti i partecipanti e poi trovava il primo degli amici… (25/100) la mia seconda soluzione spostava solo gli amici (nel tentativo di risparmiare tempo ma il risultato è stato sempre 25/100… E’ logico pensare che eseguire tutti i “salti” non sia la soluzione ottimale (dato che le assunzioni ammettono input abbastanza grandi) perciò mi era venuto in mente che probabilmente la soluzione ottimale sarebbe quella di tentare di diminuire il più possibile il numero di T (numero di squilli) in maniera tale che abbia la stessa soluzione finale (dopo T squilli) eseguendo però soltanto X scambi con X<T. Sono sulla buona strada? come dovrei trovare X?
probabilmente la soluzione ottimale sarebbe quella di tentare di diminuire il più possibile il numero di T (numero di squilli) in maniera tale che abbia la stessa soluzione finale (dopo T squilli) eseguendo però soltanto X scambi con X<T. Sono sulla buona strada?Sì, la prima osservazione da fare è che non è possibile una situazione di questo tipo:gianpiero96
la mia soluzione consiste nel trovare dopo quanti salti ogni amico k torna al posto di partenza, e fra i numeri trovati fare in MCM= X successivamente sarebbe necessario eseguire T%X salti per raggiungere la disposizione finale, il problema è che anche questa soluzione sembra non rientrare nei limiti di tempo…
la mia soluzione consiste nel trovare dopo quanti salti ogni amico k torna al posto di partenzaQuello lo sai con una sola operazione, basta seguire ciò che ha detto Wil93 :)gianpiero96
prendo ogni amico Ki singolarmente e lo sposto fino a quando non torna al posto di partenza giusto? o c’è qualcosa di più rapido che mi sfugge?
Non sono sicuro di capire la necessità di fare il MCM… non va bene eseguire T%X salti usando un X diverso per ogni amico?
effettivamente non ci avevo badato… il MCM non serve come suggeriva Wil93… ora con la nuova soluzione sono arrivato a 45/100 sembro sforare il limite di tempo di circa 1 secondo… devo trovare qualche cosa da velocizzare…
Attento che l’esecuzione di solito viene bloccata automaticamente circa un secondo dopo il tempo limite… quindi non è detto che il tuo programma sfora solo di un secondo
si esatto si blocca dopo 3 secondi (il limite è 2) però per molti dei casi test che non supero, la mia soluzione viene data a circa 2,90. Comunque in ogni caso la soluzione non è di certo ottimale, considerando le altre date…
Prova a farti un disegno della tabella degli spostamenti, dovresti notare qualcosa!
Qualcosa tipo che dopo 6 squilli (nel caso di esempio) tutti tornano al posto di partenza?
Non ti fissare sul “tornare al posto di partenza” guardando la totalità della tabella di spostamenti (perché, appunto, ti costringerebbe a fare il m.c.m.).
Si questo mi era chiaro, infatti nella mia ultima soluzione non c’è M.C.M. Ognuno dei Ki amici viene considerato singolarmente e procedo in questo modo:
Suppongo che tu ti metta a cercare X(i) per K(i) con un ciclo, per questo esci dai limiti.
Ripeto: disegnati la tabella di spostamenti e guardala sotto un’altra prospettiva.
Caspita che sbadato… non avevo considerato proprio la possibilità di trattarlo come un insieme di grafi… Grazie! provo a scrivere un nuovo codice…
Mi ricordo che tempo fa avevo scritto una soluzione (che non ho più) che procedeva in modo completamente diverso.
http://pastebin.com/71kBUxrn
con questo codice ottengo 20/100 come potrei migliorarlo?
http://pastebin.com/71kBUxrnDa quello che ho capito lanci una DFS da ogni amico per contare quanto è lungo il suo ciclo (D) e poi trovi la sua posizione in O(T%D), sbaglio?
con questo codice ottengo 20/100 come potrei migliorarlo?riccardomereu5
Se è così, una volta che sai D puoi trovarti la posizione dopo T squilli in O(1) se ti salvi un altro paio di cose!
Ad esempio? (se puoi non darmi la risposta, ma un indizio che mi porti sulla giusta strada)Se è così, una volta che sai D puoi trovarti la posizione dopo T squilli in O(1) se ti salvi un altro paio di cose!
VashTheStampede
Ad esempio se sai la lunghezza D di un ciclo, ti interesserebbe sapere pure quali nodi appartengono a quel ciclo.
Draw it! =P