Competitive Programming Tactics & Contests

Contest-ready mindset ও template

~45 min Advanced 30 practice problems Live code

1. Mindset First

Contest-এ একটি working O(n²) একটি সুন্দর কিন্তু buggy O(n log n)-এর চেয়ে ভালো। Correct first, fast second. Template practice করে boilerplate মুখস্থ করে ফেলুন।

2. A Starter Template

template.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

#define FOR(i,a,b) for(int i=(a); i<(b); i++)
#define ll long long

void solve(void) {
    int n;
    scanf("%d", &n);
    long long sum = 0;
    FOR(i, 0, n) {
        int x;
        scanf("%d", &x);
        sum += x;
    }
    printf("%lld\n", sum);
}

int main(void) {
    int t; scanf("%d", &t);
    while (t--) solve();
    return 0;
}

3. Fast I/O

fastio.c
#include <stdio.h>

static inline int read_int(void) {
    int n = 0, c = getchar_unlocked();
    int neg = 0;
    while (c == ' ' || c == '\n' || c == '\t') c = getchar_unlocked();
    if (c == '-') { neg = 1; c = getchar_unlocked(); }
    while (c >= '0' && c <= '9') { n = n * 10 + (c - '0'); c = getchar_unlocked(); }
    return neg ? -n : n;
}

int main(void) {
    int n = read_int();
    long long sum = 0;
    for (int i = 0; i < n; i++) sum += read_int();
    printf("%lld\n", sum);
    return 0;
}

Big input (10⁶+ numbers)-এ scanf-এর চেয়ে 5–10× দ্রুত। getchar_unlocked POSIX; Windows-এ _getchar_nolock বা নিজের buffered reader।

4. Top Pitfalls

  • Integer overflow — 10⁵ × 10⁵ = 10¹⁰, 32-bit int overflow। long long ব্যবহার করুন।
  • Off-by-one — boundary, inclusive/exclusive range সতর্কতায় দেখুন।
  • Uninitialized globals multi-test case-এ — প্রতি test শুরুতে reset।
  • printf format — long long → %lld।
  • Edge cases — n=0, n=1, duplicates, negatives, overflow।
  • TLE — সাধারণত wrong complexity class।

5. Reading the Problem

  1. দুবার পড়ুন।
  2. Input size লক্ষ্য করুন — complexity budget।
  3. Sample হাতে করে দেখুন।
  4. Edge case টাইপ করার আগেই ভাবুন।
  5. আটকে গেলে ছোট version-এ চেষ্টা করুন।

6. Where to Practice

  • Codeforces — প্রতি সপ্তাহে contest, rating, editorial।
  • AtCoder — সুন্দর, পরিষ্কার সমস্যা।
  • LeetCode — interview prep।
  • SPOJ, UVa, Timus — classic archive।
  • ICPC regional — জাতীয় ও আন্তর্জাতিক পর্যায়ে।

7. Practice Problems

  1. Reimplement fast I/O; benchmark.
    Fast I/O লিখে benchmark।
    ✨ Show Answer

    Section 3 reference। scanf vs getchar_unlocked — 10⁶ ints-এ ~5–10× পার্থক্য।

  2. Solve 5 Codeforces Div. 2 A problems.
    5টি CF Div.2 A।
    ✨ Show Answer

    Codeforces-এ "Problemset" → rating filter 800-1000 → any 5। প্রতিটিতে 15 min-এর বেশি না।

  3. 5 Div. 2 B problems.
    5টি Div.2 B।
    ✨ Show Answer

    Rating 1100-1300। A-র চেয়ে একটু বেশি thinking; observation-ই key।

  4. Prefix sum problem.
    Prefix sum।
    ✨ Show Answer
    ps[0] = 0;
    for (int i = 0; i < n; i++) ps[i+1] = ps[i] + a[i];
    // sum [l, r] = ps[r+1] - ps[l];
  5. Two-pointer — pair sum on sorted array.
    Sorted array-এ two-pointer pair sum।
    ✨ Show Answer

    l = 0, r = n-1। sum < target → l++; sum > target → r--; = target → found।

  6. Sliding window — longest substring without repeat.
    Sliding window।
    ✨ Show Answer

    Frequency map; left expand যতক্ষণ repeat থাকে। ans = max(ans, r - l + 1)।

  7. Trailing zeros of n!.
    n!-এর trailing zero।
    ✨ Show Answer

    Count 5, 25, 125, ... factor of n। z = 0; while (n) { n /= 5; z += n; }

  8. Range updates with difference array.
    Difference array দিয়ে range update।
    ✨ Show Answer

    Range [l, r]-এ +v: d[l] += v; d[r+1] -= v; শেষে prefix-sum দিয়ে রূপান্তর।

  9. Segment tree for range sum / range min.
    Segment tree।
    ✨ Show Answer

    4n array; recursive build/update/query। O(log n)। Lazy propagation range update-এ দরকার।

  10. Fenwick tree (BIT).
    Fenwick tree।
    ✨ Show Answer
    int bit[N + 1];
    void upd(int i, int v) { for (; i <= N; i += i & -i) bit[i] += v; }
    int qry(int i) { int s = 0; for (; i; i -= i & -i) s += bit[i]; return s; }
  11. Union-Find with path compression + union by rank.
    Union-Find।
    ✨ Show Answer
    int find(int x) { return par[x] == x ? x : (par[x] = find(par[x])); }
    void unite(int a, int b) {
        a = find(a); b = find(b);
        if (a == b) return;
        if (rnk[a] < rnk[b]) { int t = a; a = b; b = t; }
        par[b] = a;
        if (rnk[a] == rnk[b]) rnk[a]++;
    }
  12. Sieve up to 10⁷.
    10⁷ sieve।
    ✨ Show Answer

    L34 Section 4-এর sieve-ই — N = 10⁷। Memory: bit-compressed বা char array ব্যবহার করুন।

  13. Binary lifting for LCA.
    Binary lifting LCA।
    ✨ Show Answer

    up[v][k] = v-এর 2^k-তম ancestor। DFS-এ preprocess। Query-এ first সমান depth-এ আনুন, তারপর together lift।

  14. KMP string matching.
    KMP।
    ✨ Show Answer

    Failure function (prefix-function) preprocess; match-এ fail হলে pattern-এ back-jump। O(n + m)।

  15. Z-function.
    Z-function।
    ✨ Show Answer

    z[i] = longest match of s[i..] with s[0..]। Linear scan with "z-box" window। O(n)।

  16. Trie.
    Trie।
    ✨ Show Answer

    Node-এ children array (26 বা 256); insert/search প্রতি char-এ O(L)।

  17. Suffix array — introduction.
    Suffix array (intro)।
    ✨ Show Answer

    Suffix-গুলো sorted। Naive O(n²·log n); better O(n log² n) বা O(n log n) SA-IS। LCP array combined powerful।

  18. Mo's algorithm — idea.
    Mo's algorithm।
    ✨ Show Answer

    Offline query [l, r]-গুলো √n block-এ sort করে process। Pointer slowly move, reuse। O((n + q) √n)।

  19. Bitmask DP — n ≤ 20.
    Bitmask DP।
    ✨ Show Answer

    L33 reference: TSP। State = (mask, last vertex)।

  20. Digit DP.
    Digit DP।
    ✨ Show Answer

    L33 reference। State = (pos, tight, extra)।

  21. Game theory — Nim, Sprague–Grundy.
    Nim, Sprague-Grundy।
    ✨ Show Answer

    Nim: XOR sum = 0 হলে loser। Sprague-Grundy: প্রতিটি game position-এ g(pos) = mex{g(reachable positions)}।

  22. Convex hull.
    Convex hull।
    ✨ Show Answer

    Andrew's monotone chain: points sort করুন; upper + lower hull build। O(n log n)।

  23. Ternary search.
    Ternary search।
    ✨ Show Answer

    Unimodal function-এ min/max। Range-কে ৩ ভাগে ভাগ করুন, পাশের ২/৩ ফেলে দিন। O(log n)।

  24. SQRT decomposition.
    Sqrt decomposition।
    ✨ Show Answer

    Array-কে √n block-এ ভাগ করুন; block-wise aggregate store। Query/update O(√n)।

  25. Heavy-light decomposition — concept.
    HLD।
    ✨ Show Answer

    Tree-কে heavy/light edge-এ ভাগ। Path queries O(log²n) হয় segment tree combined। Advanced topic।

  26. Link/cut trees — concept.
    Link/cut trees।
    ✨ Show Answer

    Splay tree-ভিত্তিক dynamic tree structure। Path queries + link/cut — all O(log n) amortized।

  27. Persistent data structures — concept.
    Persistent data structures।
    ✨ Show Answer

    Update-এ নতুন version তৈরি হয়, পুরনো পাথ থাকে। Path copying বা fat node। Persistent segment tree advanced contest-এ।

  28. How to debug RE / TLE / WA quickly.
    RE / TLE / WA দ্রুত debug।
    ✨ Show Answer

    RE: array size, NULL deref, div-by-0 — -fsanitize=address। TLE: complexity বা slow I/O। WA: edge case — n=0, n=1, negative, overflow।

  29. Write a stress test to find bugs.
    Stress test।
    ✨ Show Answer

    Brute solution + small random input generator + your solution। তিনটি output diff — mismatch হলেই ছোট সাইজে বাগ ধরেছেন।

  30. Build a personal snippet file with your templates.
    Personal snippet file।
    ✨ Show Answer

    snippet.c-এ Union-Find, BIT, Sieve, power_mod, fast I/O, graph template... Contest-এ copy-paste।

Glossary (শব্দকোষ)

TermMeaningবাংলায়
Competitive Programming (CP)Solving algorithmic problems under time pressure.সময়ের চাপে algorithmic সমস্যা সমাধান।
Online JudgeSite that auto-grades submissions (Codeforces, AtCoder...).স্বয়ংক্রিয়ভাবে submission যাচাইকারী সাইট।
AC (Accepted)Submission passed all test cases.সব test pass হয়েছে।
WA (Wrong Answer)Submission produced incorrect output.ভুল output।
TLETime Limit Exceeded — too slow.Time limit ছাড়িয়ে গেছে।
MLEMemory Limit Exceeded.Memory limit ছাড়িয়ে গেছে।
RERuntime Error (crash, division by zero).Runtime crash।
CECompilation Error.Compile-time ভুল।
Sample I/OExample test cases shown in the problem.প্রশ্নে দেওয়া উদাহরণ test।
Edge CaseBoundary input (n=0, n=max, all same...).সীমান্ত-input — যেমন n=0।
Stress TestingCompare brute-force vs fast solution on random inputs.Random input-এ brute vs fast তুলনা।
TemplateReusable starter code with common helpers.Reusable starter কোড।
Fast I/OTechniques to speed up input/output.I/O দ্রুত করার কৌশল।
ConstraintsLimits on n, values, time — drive the algorithm choice.n, value, time-এর সীমা — algorithm পছন্দে গাইড।
ICPC / Codeforces / AtCoderMajor contest venues.প্রধান contest প্ল্যাটফর্ম।

Summary — Module 35

Template + Fast I/O + যত্ন করে সমস্যা পড়া + correct-first mindset। Contest জয়ের পথ regular practice-এ।

Next Module → Advanced Pointers।