Featured image of post Shortening Code in C++

Shortening Code in C++

Tips para comenzar a acortar codigo como todo un chad para programacion competitiva

El c贸digo corto es ideal en la programaci贸n competitiva, ya que los programas deben escribirlos lo m谩s r谩pido posible. Debido a esto, la programaci贸n competitiva a menudo define nombres m谩s cortos para tipos de datos y otras partes del c贸digo. A continuacion se muestra como usar estos tipos de datos,

Type names

Usando el comando typedef, es posible dar un nombre m谩s corto a un tipo de dato; por ejemplo, el nombre long long es largo, as铆 que podemos definir un nombre m谩s corto, como por ejemplo:

1
typedef long long ll

Despues el codigo:

1
2
3
4
ll a = 123456789;
ll b = 987654321;

std::cout << a * b << "\n";

El comando typedef tambi茅n se puede usar con tipos m谩s complejos; por ejemplo, el siguiente c贸digo da el nombre “vi” para un vector de enteros y el nombre “pi” para un par que contiene dos enteros.

1
2
typedef vector <int> vi;
typedef pair <int, int> pi;

Macros

Otra forma de acortar el c贸digo es definir macros. Una macro significa que ciertas cadenas en el c贸digo se cambiar谩n antes de la compilaci贸n. En C++, las macros se definen usando la palabra clave #define.

Por ejemplo, podemos definir las siguientes macros.

1
2
3
4
#define F first
#define S second
#define PB push_back
#define MP make_pair

Despues de esto, el codigo:

1
2
3
4
array.push_back(make_pair(y1, x1));
array.push_back(make_pair(y2, x2));

int d = array[i].first + array[i].second;

Puede abreviarse como sigue:

1
2
3
4
array.PB(MP(y1, x1));
array.PB(MP(y2, x2));

int d = array[i].F + array[i].S;

Macros con parametros

Una macro tambi茅n puede tener par谩metros que permiten acortar bucles y otras estructuras, por ejemplo, podemos definir la siguiente macro:

1
#define REP(i, a, b) for (int i = a; i < b; i++)

Despues de esto, el codigo:

1
2
3
for (int i=0; i<b; i++) {
	search(10);
}

Puede abreviarse como sigue:

1
2
3
REP(i, 0, n) {
	search(10);
}

Errores mientras hacemos uso de los macros

A veces las macros causan errores que pueden ser dif铆ciles de detectar, por ejemplo, considere la siguiente macro que calcula el cuadrado de un n煤mero

1
#define SQ(a) a * a

Esta maro no siempre puede funcionar como se espera, como por ejemplo en este codigo:

1
std::cout << SQ(3+3) << "\n";

Corresponde a esta operacion:

1
std::cout << SQ(3 + 3 * 3 + 3) << "\n"; // 15

Una mejor version de la macro is como la siguiente:

1
#define SQ(a) (a)*(a)

Ahora el codigo:

1
std::cout << SQ(3 + 3) << "\n";

Corresponde a esta operacion:

1
std::cout << (3+3) * (3+3) << "\n"; // 36

El uso de tipos de datos y macros en programaci贸n competitiva es fundamental para optimizar tanto el rendimiento como la claridad del c贸digo. Es importante saber elegir los tipos de datos adecuados para manejar mejor los recursos de memoria y asi evitar errores, mientras que las macros simplifican el c贸digo, mejoran su legibilidad y reducen la redundancia. Ambas pr谩cticas permiten escribir soluciones m谩s eficientes y menos propensas a fallos, lo cual es clave en competiciones donde el tiempo y la precisi贸n son esenciales.

comments powered by Disqus
Creado con Hugo
Tema Stack dise帽ado por Jimmy