Para los que participen en concursos de programación con límite de tiempo les voy a dar un pequeño código que les puede ser útil.
Es código que vale para C/C++ y mejora la lectura de datos desde entrada estandar.
Si estamos en C++ lo normal es usar "cin" y en C "scanf". Pues existe una forma de hacer esa lectura aun más rápido, que es usar estos trozos de código:
Nota: Cuando aparece <, equivale a <
Para leer números enteros:
inline void fastRead(int *a){ register char c=0; while (c < 33) c=getchar(); *a=0; while (c>33) { *a=*a*10+c-'0'; c=getchar(); } }
Como me han hecho falta para algunos problemas, he creado versiones de este mismo código para leer char, strings y demás, aquí las dejo:
Para leer un char:
inline void fastRead_char(char *a){ register char c=0; while (c<33) c=getchar(); *a=c; }
Para leer un int seguido de un char que no se quiere tener en cuenta (Ej. 12$, 90%, etc):
inline void fastRead_int(int *a){ register char c=0; while (c<33) c=getchar(); *a=0; while (c> 47 && c < 58) { *a=*a*10+c-'0'; c=getchar(); } }
Para leer un string (C++):
inline void fastRead_string(string *a){ register char c=0; while (c<33) c=getchar(); *a=""; while (c>33) { *a+=c; c=getchar(); } }
Para leer un string que contenga espacios (C++) (Ej. Hola mundo, en el anterior solo guardaria "Hola")
inline void fastRead_string2(string *a){ register char c=0; while (c<33) c=getchar(); *a=""; while (c>31) { *a+=c; c=getchar(); } }
Estos códigos se pueden mejorar utilizando getchar_unlocked() en vez de getchar(), probadlo ya que a mi me dice que no encuentra "getchar_unlocked()"
No hay comentarios:
Publicar un comentario