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.