Өрсөлдөөнт программчлал бол зүгээр нэг код бичих бус, хурд, нарийвчлал, оновчтой сэтгэлгээний бодит тулаан юм. Үүнтэй зэрэгцэн программист бүрийн хувьд секунд бүр алт шиг үнэтэй байдаг. Тиймээс олон туршлагатай программистууд алдааны магадлалыг бууруулах, код бичих хугацааг хэмнэх зорилгоор урьдчилан бэлдсэн, олон дахин ашиглах боломжтой “template” буюу эх загвар ашигладаг. Энэхүү нийтлэлээр бид өрсөлдөөнт орчинд хамгийн өргөн хэрэглэгддэг, хурд, хялбар байдал, уян хатан байдлыг хослуулсан сонгодог C++ template-ийг танилцуулж, түүний бүрдэл хэсгүүдийг алхам алхмаар задлан ойлгох болно.

include<bits/stdc++.h>
Энэ нь C++ стандарт сангуудыг бүгдийг нь нэг дор агуулж авдаг тусгай header файл юм.
Үүний ачаар та iostream, vector, algorithm, string гэх мэт олон header файлуудыг тус тусад нь бичихгүйгээр шууд ашиглах боломжтой.
Анхаарах зүйл: Энэ header-г зөвхөн өрсөлдөөнт программ бичих үед (competitive programming) ашиглахыг зөвлөдөг, томоохон төсөлд биш.
using namespace std;
std нэрийн сангийн элементүүдийг шууд ашиглах боломжоор хангана. Жишээ нь std::cout биш cout гэж бичнэ гэсэн үг.
void solve()
Программын гол шийдэл буюу бодлогын алгоритм байрлах функц юм.
Одоогоор хоосон, гэхдээ өрсөлдөөнт програмчлалын үед олон даалгаврыг нэг кодонд шийдэхэд тус бүрт нь solve() гэж нэрлэсэн функц ашиглана.
main() функцийн тайлбар
int32_t гэж тодорхойлсон нь int-тэй бараг адилхан (ихэвчлэн 32-битийн int), кодын уншигдах байдлыг сайжруулах зорилготой. Үндсэндээ int main() гэж бичсэнтэй адил.
орчны тохиргоо
Зорилго: Программыг шалгахдаа гараар консолоор оролт гаралт хийхгүйгээр файл ашиглан туршихад хялбар.

- #ifndef ONLINE_JUDGE — хэрэв ONLINE_JUDGE гэж тодорхойлсон биш бол гэсэн утгатай.
Ихэвчлэн онлайн өрсөлдөөнт системүүд (Codeforces, AtCoder, SPOJ гэх мэт) орчныг автоматаар ONLINE_JUDGE macro-оор тэмдэглэдэг.
Тэгэхээр энэ хэсэг код нь зөвхөн таны локал машин дээр ажиллах үед идэвхтэй болно. - freopen(“input.txt”, “r”, stdin);
Стандарт оролтыг (консолоор оруулж авдаг өгөгдөл) input.txt файл руу чиглүүлж байна. - freopen(“output.txt”, “w”, stdout);
Стандарт гаралтыг (консолоор хэвлэх үр дүн) output.txt файл руу чиглүүлнэ.
Оролт гаралтын хурд нэмэгдүүлэх
Эдгээр тохиргоо нь оролт гаралтын хурдыг ихээхэн нэмэгдүүлдэг тул өрсөлдөөнт программд ашиглагддаг.

- ios_base::sync_with_stdio(0);
cin болон cout-г C хэлний scanf/printf-тэй синхрончлохоо болиулна. Ингэснээр оролт гаралт хурдан болно. - cin.tie(0);
cin болон cout-ийн холболтыг салгана. Ер нь cin-ээс оролт авах үед cout-ийг автоматаар гүйцэтгэдэг байдлыг таслана. - cout.tie(0);
Ижил утгатай, ер нь cout-г өөр зүйлд бэхлэхгүй.
Программын хугацаа хэмжих
clock_t z = clock();
clock() нь програм эхэлсэн цагаас хойш CPU цаг хугацааг тоолно.
z хувьсагчид эхлэх үеийн цаг хугацааг хадгална.
Туршилтын давталт (тестийн тоо)

- t нь хэр олон тест (асуулт) шийдэхийг заана.
- Одоогоор 1 гэж өгсөн ба cin >> t; шугам нь сэтгэгдэлд оруулсан тул хэрэглэгдэхгүй байна.
- Хэрвээ олон тест орж ирвэл коммент тайлбарлахад хангалттай.
- Давталтаар solve() функцыг нэг удаа дуудаж байна.

- clock() дахин дуудаж одоогийн цагийг авч байна. Эхлэх цагаас хасвал програм хэр удаан ажилласан хугацааг олно.
- CLOCKS_PER_SEC нь секунд дотор хэдэн clock() нэгж байдагыг заана.
- cerr-д бичиж байгаа нь stderr буюу алдааны гаргалгаанд бичнэ, стандарт гаралтаас тусдаа байдаг тул өрсөлдөөнт системд үр дүнтэй байдаг.
- Ингэснээр кодын гүйцэтгэлийн хугацааг консолд гаргана.
Дүгнэлт
- Энэ код нь өрсөлдөөнт програмчлалын үндсэн загвар (template) юм.
- Тухайн бодлогын гол шийдэл нь solve() функцэд бичигдэнэ.
- Локал тест хийхдээ оролт гаралтыг файлаас уншиж, файл руу бичдэг тохиргоо оруулсан.
- Хурдан оролт гаралт хийх тохиргоо хийсэн.
- Программыг эхэлснээс дуусах хүртэлх хугацааг хэмжиж консолд хэвлэнэ.
- Нэг эсвэл олон тестийг дамжуулан гүйцэтгэх боломжийг нээлттэй хадгалсан.
Ийм загвар нь хурдан ба цэгцтэй программ бичихэд маш тохиромжтой бөгөөд өрсөлдөөнт программчлалын хувьд үндсэн эхлэл болдог.
https://gist.github.com/Neilblaze/dcf6113fa5e63fc938502f1d742365c4