C++: Methods of code shortening in competitive programming - GeeksforGeeks

17 Jun, 2021
Shortcode is ideal in competitive programming because programs should be written as fast as possible. Because of this, competitive programmers often define shorter names for datatypes and other parts of the code. We here discuss the method of code shortening in C++ specifically.Type names Using the command typedef it is possible to give a shorter name to a datatype. For example, the name long long is long, so we can define a shorter name ll: typedef long long ll; After this, the code  
CPP
long long a = 123456789;long long b = 987654321;cout << a * b << "\n";
can be shorted as follows:  
CPP
ll a = 123456789;ll b = 987654321;cout << a * b << "\n";
The command typedef can also be used with more complex types. For example, the following code gives the name vi for a vector of integers and the name pi for a pair that contains two integers,  
CPP
typedef vector<int> vi;typedef pair<int, int> pi;
Macros Another way to shorten code is to define macros. A macro means that certain strings in the code will be changed before the compilation. In C++, macros are defined using the #define keyword. For example, we can define the following macros: #define F first #define S second #define PB push_back#define MP make_pairAfter this, the codev.push_back(make_pair(y1, x1)) ;v.push_back(make_pair(y2, x2)); int d = v[i].first+v[i].second;can be shorted as followsv.PB(MP(y1, x1)); v.PB(MP(y2, x2)); int d = v[i].F+v[i].S; A macro can also have parameters which makes it possible to shorten loops and others structures. For example, we can define the following macro: #define REP(i, a, b) for (int i=a; i<=b; i++) After this, the code for (int i=1; i<=n; i++){ search(i); } can be shortened as follows: REP(i, 1, n){ search(i); }A version of template given below This can be use in competitive programming for faster coding.  
CPP
#include <bits/stdc++.h> // Include every standard libraryusing 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;}
sachiniyermalkapur
amtheshubham
abhishek0719kadiyan
cpp-macros
C Language
C++
Competitive Programming
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
rand() and srand() in C/C++
Left Shift and Right Shift Operators in C/C++
fork() in C
Command line arguments in C/C++
Substring in C++
Initialize a vector in C++ (6 different ways)
Map in C++ Standard Template Library (STL)
Inheritance in C++
C++ Classes and Objects
Constructors in C++