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