The Arithmetic of Budgets
Sandbox reality check: what 10^8, 10^9, and 10^10 operations mean in seconds โ and the memory line.
The Arithmetic of Budgets
Contest time limits are calibrated so the intended complexity passes with margin. Your job in the first ten minutes is to compute the budget.
The working numbers
Modern judges (and this platform's C++20 sandbox) execute roughly:
- ~10^9 trivial operations (integer add, compare, array read) per second,
- ~10^8 "normal" operations (map insert, modulo, function call chains),
- ~10^7 heavy operations (sort of small vectors, string builds).
So: nยทq with n = q = 2ยท10^5 is 4ยท10^10 โ 100ร over budget even for
trivial ops. n log n with n = 2ยท10^5 is ~3.4ยท10^6ยท(log factor) โ deep
inside budget. This is why the intended complexity, not clever constants,
is what the constraint table is telling you.
Memory is the silent constraint
int a[1000][1000] is 4 MB โ fine. long long a[10^5][10^5] is 80 GB โ
not a program, a hallucination. The sandbox grants 512 MB: a
vector<long long> of 10^6 elements is 8 MB (fine); of 10^8 is 800 MB
(dead). When a DP state is (position ร mask) with n = 24, 2^24 ร 8 B = 134
MB โ possible but tight; think before allocating.
Value ranges encode the state space
- sums up to 10^5 ร 10^9 โ 10^14 โ long long mandatory, int overflows silently.
- answers modulo 10^9+7 โ the true number is astronomically large; anything that stores it raw (including intermediate products) must be reduced.
- N โค 10^18 โ the state is the digits or the log, never N itself.
The two-second estimate (do it before reading the statement twice)
Given the constraint table, compute: n ยท (per-item cost), n log n,
n^2, 2^n, and see which crosses the line. The family that survives the
arithmetic and matches the semantics is your candidate. Everything after
this module is about confirming the semantics part.