Shortcode es ideal en la programación competitiva porque los programas deben escribirse lo más rápido posible. Debido a esto, los programadores competitivos suelen definir nombres más cortos para los tipos de datos y otras partes del código.
Aquí discutimos el método de acortamiento de código en C++ específicamente.
Escriba nombres
Usando el comando typedef es posible dar un nombre más corto a un tipo de datos.
Por ejemplo, el nombre long long es long, por lo que podemos definir un nombre más corto ll:
typedef long long ll;
Después de esto, el código
CPP
long long a = 123456789; long long b = 987654321; cout << a * b << "\n";
se puede acortar de la siguiente manera:
CPP
ll a = 123456789; ll b = 987654321; 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 a un vector de números enteros y el nombre pi a un par que contiene dos números enteros,
CPP
typedef vector<int> vi; typedef pair<int, int> pi;
Macros
Otra forma de acortar código es definir macros . Una macro significa que ciertas strings en el código se cambiarán antes de la compilación. En C++, las macros se definen mediante la palabra clave #define.
Por ejemplo, podemos definir las siguientes macros:
#define F first
#define S second
#define PB push_back
#define MP make_pair
Después de esto, el código
v.push_back(make_pair(y1, x1)) ;
v.push_back(hacer_par(y2, x2));
int d = v[i].primero+v[i].segundo;
se puede acortar de la siguiente manera
v.PB(MP(y1, x1));
v.PB(MP(y2, x2));
int d = v[i].F+v[i].S;
Una macro también puede tener parámetros que permiten acortar bucles y otras estructuras. Por ejemplo, podemos definir la siguiente macro:
#define REP(i, a, b) for (int i=a; i<=b; i++)
Después de esto, el código
para (int i=1; i<=n ;i++){
buscar(i);
}
se puede acortar de la siguiente manera:
REP(i, 1, n){
buscar(i);
}
Una versión de la plantilla que se muestra a continuación
. Puede usarse en programación competitiva para una codificación más rápida.
CPP
#include <bits/stdc++.h> // Include every standard library using namespace std; typedef long long LL; typedef pair<int, int> pii; typedef pair<LL, LL> pll; typedef pair<string, string> pss; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<pii> vii; typedef vector<LL> vl; typedef vector<vl> vvl; double EPS = 1e-9; int INF = 1000000005; long long INFF = 1000000000000000005LL; double PI = acos(-1); int dirx[8] = { -1, 0, 0, 1, -1, -1, 1, 1 }; int diry[8] = { 0, 1, -1, 0, -1, 1, -1, 1 }; #ifdef TESTING #define DEBUG fprintf(stderr, "====TESTING====\n") #define VALUE(x) cerr << "The value of " << #x << " is " << x << endl #define debug(...) fprintf(stderr, __VA_ARGS__) #else #define DEBUG #define VALUE(x) #define debug(...) #endif #define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a)) #define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a)) #define FORD(a, b, c) for (int(a) = (b); (a) >= (c); --(a)) #define FORSQ(a, b, c) for (int(a) = (b); (a) * (a) <= (c); ++(a)) #define FORC(a, b, c) for (char(a) = (b); (a) <= (c); ++(a)) #define FOREACH(a, b) for (auto&(a) : (b)) #define REP(i, n) FOR(i, 0, n) #define REPN(i, n) FORN(i, 1, n) #define MAX(a, b) a = max(a, b) #define MIN(a, b) a = min(a, b) #define SQR(x) ((LL)(x) * (x)) #define RESET(a, b) memset(a, b, sizeof(a)) #define fi first #define se second #define mp make_pair #define pb push_back #define ALL(v) v.begin(), v.end() #define ALLA(arr, sz) arr, arr + sz #define SIZE(v) (int)v.size() #define SORT(v) sort(ALL(v)) #define REVERSE(v) reverse(ALL(v)) #define SORTA(arr, sz) sort(ALLA(arr, sz)) #define REVERSEA(arr, sz) reverse(ALLA(arr, sz)) #define PERMUTE next_permutation #define TC(t) while (t--) inline string IntToString(LL a) { char x[100]; sprintf(x, "%lld", a); string s = x; return s; } inline LL StringToInt(string a) { char x[100]; LL res; strcpy(x, a.c_str()); sscanf(x, "%lld", &res); return res; } inline string GetString(void) { char x[1000005]; scanf("%s", x); string s = x; return s; } inline string uppercase(string s) { int n = SIZE(s); REP(i, n) if (s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 'a' + 'A'; return s; } inline string lowercase(string s) { int n = SIZE(s); REP(i, n) if (s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i] - 'A' + 'a'; return s; } inline void OPEN(string s) { #ifndef TESTING freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); #endif } // end of Sektor_jr template v2.0.3 (BETA) int main() { freopen("A.in", "r", stdin); freopen("output.txt", "w", stdout); int a, b; fin >> a >> b; fout << a + b << endl; return 0; }