Skip to content
Related Articles

Related Articles

Improve Article

Writing code faster during Competitive Programming in C++

  • Difficulty Level : Easy
  • Last Updated : 04 May, 2020

This article focuses on how to implement your solutions and implement them fast while doing competitive programming.

Setup Please refer Setting up a C++ Competitive Programming Environment

Snippets Snippet is a programming term for a small region of re-usable source Code. A lot of modern text editors like Sublime provide you a functionality to automatically write a predefined snippet by just writing a keyword. One can speed up their implementation by using Snippets. So if you need to do a BFS or DFS(or any other code), you just need to press ‘Keyword+Tab’ to get it’s code.

How to add a snippet Adding a snippet in Sublime Text is pretty straightforward. Just navigate to Tools>Developers>New Snippet.

<snippet>
<content><![CDATA[



// Type your code here

]]></content>
<tabTrigger>ENTER KEYWORD HERE</tabTrigger>
</snippet>

Use this as your base template for a snippet and paste the code that you want to use in your Snippet by replacing the comment and trigger Keyword.

Macros
They are a way to assign shorter notations to things that are usually longer to write.
They can be easily written using #define.

Example 1:
Before using Macros:




long long int a;
vector<long long int> v;
map<long long int, long long int> mp;

After using Macros:




// ll can be used instead of typing long long int
#define ll long long int
  
ll a;
vector<ll> v;
map<ll, ll> mp;

Example 2:
Before using Macros:




for (int i = 0; i < N; i++)
    cin >> a[i];
  
for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
        cout << m[i][j] << endl;
    }
}

After using Macros:




// Use this macro instead of typing the whole
// for-loop syntax
#define FOR(a, c) for (int(a) = 0; (a) < (c); (a)++)
  
FOR(i, N)
cin >> a[i];
  
FOR(i, N)
{
    FOR(j, M)
    {
        cout << m[i][j] << endl;
    }
}

Example 3:




vector v;
  
for (int i = 0; i < N; i++) {
    cin >> x >> y;
    v.push_back(make_pair(x, y));
}

After:




#define ll long long int
#define MP make_pair
#define pb push_back
  
vector<ll, ll> v;
  
for (int i = 0; i < N; i++) {
    cin >> x >> y;
    v.pb(MP(x, y));
}

Note: Write your macros at the beginning of your code(refer to the template given below).

Using a Template
Using a template is one of the best idea to speed up your implementation. Keep your template ready that has your macros written in them already. This helps in reducing a lot of your time which otherwise would have gone in writing the whole code from scratch.
I use the following template, you can use one that suits you.




#include "bits/stdc++.h"
using namespace std;
#define max(a, b) (a < b ? b : a)
#define min(a, b) ((a > b) ? b : a)
#define mod 1e9 + 7
#define FOR(a, c) for (int(a) = 0; (a) < (c); (a)++)
#define FORL(a, b, c) for (int(a) = (b); (a) <= (c); (a)++)
#define FORR(a, b, c) for (int(a) = (b); (a) >= (c); (a)--)
#define INF 1000000000000000003
typedef long long int ll;
typedef vector<int> vi;
typedef pair<int, int> pi;
#define F first
#define S second
#define PB push_back
#define POB pop_back
#define MP make_pair
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin >> T;
    while (T--) {
        int N;
        cin >> N;
        ll a[N];
        FOR(i, N)
        cin >> a[i];
    }
    return 0;
}

Thank you for reading, please let me know if you have some possible improvement or addition.




My Personal Notes arrow_drop_up
Recommended Articles
Page :