Mi stavo cimentando nella risoluzione dei problemi delle Olimpiadi e mi sono chiesto come fosse possibile ottimizzare il codice per racimolare più secondi possibile.
Per esempio avevo sentito parlare delle direttive #pragma; o anche di metodi migliori per leggere in input.
Le ottimizzazioni di cui parli possono farti guadagnare al massimo qualche piccola frazione di secondo, ma ciò è abbastanza inutile (eccetto che per scalare le classifiche dei task).
Per quanto riguarda la mia esperienza, l’unica riga di codice che può fare una differenza piuttosto significativa sui tempi di esecuzione è la seguente:
std::ios::sync_with_stdio(false);
Questo comando permette di disattivare la sincronizzazione fra gli stream standard di c e di c++, velocizzando l’import dei dati.
Penso che con “#pragma” tu ti riferissi ad un qualcosa di questo tipo:
#pragma GCC optimize("O3")
Con questo comando è possibile cambiare i livelli di ottimizzazione del compilatore, tuttavia la differenza è spesso pressoché nulla.
Come già detto da @bortoz nella stramaggioranza dei casi i problemi di TLE ci sono solo nel momento in cui si adottano soluzioni con complessità non ottimali.
La mia esperienza è piuttosto limitata, quindi si accettano correzioni dai veterani di questa piattaforma, abbiate venia!