برنامه نویسی

افزایش سرعت کد زدن در مسابقات برنامه نویسی

مسابقات برنامه نویسی

راهکار افزایش سرعت کدنویسی

در این مقاله از وب سایت کالی بویز تصمیم به بررسی یک روش برای افزایش سرعت کد نویسی در مسابقات برنامه نویسی را داریم. قصد داریم نکات و کدهایی را بررسی کنیم که باعث افزایش سرعت کد نویسی می شوند. بهتر است از این نکات و کدها در ساخت نرم افزارها استفاده نکنید، بلکه این راهکارها برای افزایش سرعت کد نویسی در مسابقات بسیار مفید می باشند.

برای افزایش سرعت کدنویسی در مسابقات برنامه نویسی بهتر است تا جایی که امکان دارد کد خود را کوتاه نوشته و از دستورات و تعداد کاراکترهای کمتری استفاده کنید. در اینصورت می توانید با بیشترین سرعت ممکن به نتیجه برسید.

به این منظور معمولا در مسابقات برنامه نویسی برای انواع داده ها و سایر قسمت های برنامه نام های کوتاه تری را انتخاب می کنند. ما در اینجا به طور خاص در مورد روش کوتاه کردن کد در زبان ++C صحبت خواهیم کرد:

 کوتاه کردن نام انواع داده ها

در زبان سی و سی پلاس پلاس می توان با استفاده از دستور typedef نام ساده تری برای انواع داده ها انتخاب کرد. به عنوان مثال نوع داده ای long long کلمه ای طولانی است بنابراین می توانیم آن را به نام کوتاه تری مانند ll تبدیل کنیم. به صورت زیر:

typedef long long ll;

اکنون به راحتی با استفاده از کلمه ll می توانیم متغیرهایی با نوع داده ای long long  تعریف کنیم، مانند مثال زیر:

ll a = 123456789; 
ll b = 987654321; 
cout << a * b << "\n";

دستور typedef را برای انواع پیچیده تری نیز می توان بکار برد، به مثال های زیر توجه کنید:

typedef vector<int> vi; 
typedef pair<int, int> pi;

ماکروها در افزایش سرعت کد نویسی

افزایش سرعت کد زدن در مسابقات برنامه نویسیروش دیگر کوتاه کردن کدهای برنامه نویسی استفاده از ماکروها می باشد. ماکروها دستورات پیش پردازنده هستند که قبل از ترجمه برنامه توسط کامپایلر تغییراتی را در برنامه ایجاد می کنند. در مثال زیر با استفاده از دستور define# توابعی را تعریف می کنیم که با کمک آن ها دستورات قطعه کد زیر را تا جای ممکن کاهش دهیم:

v.push_back(make_pair(y1, x1));
v.push_back(make_pair(y2, x2));
int d = v[i].first+v[i].second;

عبارت بالا را می توان به صورت زیر نوشت:

#define F first;
#define S second;
#define PB push_back;
#define MP make_pair;
v.PB(MP(y1, x1));
v.PB(MP(y2, x2));
int d = v[i].F+v[i].S;

ماکروها امکان کوتاه کردن حلقه ها و دیگر ساختارها را نیز برای ما فراهم می کنند، به عنوان مثال می توانیم به جای استفاده از دستور

for (int i=1; i<=n; i++){
search(i);
}

از دستور زیر استفاده کنیم:

#define REP(i, a, b) for (int i=a; i<=b; i++)
REP(i, 1, n){
search(i);
}

شاید تعجب کنید که تعداد خط کدهای برنامه ای که از ماکروها استفاده می کند بیشتر از حالت معمولی است، اما در باید توجه کنید که در کل الگوریتم تنها با یکبار تعریف کردن نوع داده ها و حلقه ها با نام های کوتاه تر می توان در کل برنامه از آن ها استفاده کرد. در آخر مثالی کامل و جامع را آورده ایم که نشان دهنده راحتی این روش کد نویسی را برای شما نمایان می کند.

#include <bits/stdc++> //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 
}

int main()
{
    freopen("A.in", "r", stdin); 
    freopen("output.txt", "w", stdout); 

    int a, b; 
    fin >> a >> b; 
    fout << a + b << endl; 
    return 0; 
}

این مقاله نیز به پایان رسید. امیدوارم برای شما خواننده گرامی مفید بوده باشد

برای مطالعه بیشتر:

محمود احمدی

در حال یادگیری...

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


دکمه بازگشت به بالا