C++: Métodos de acortamiento de código en programación competitiva

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;
}

Publicación traducida automáticamente

Artículo escrito por Sektor_jr y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *