C · Legendary · 11 min

When to Skip

Contest points are per problem, not per minute of stubbornness. Read everything, spend a bounded slot, and skip when the next open problem is a better use of the clock.

A Codeforces round is usually 2 hours and 5–8 problems. An ICPC regional is 5 hours, 10–13 problems, three people, one computer. In both, the scoreboard rewards solved problems (and on CF, time from start for each solve). It does not reward proving you could have gotten B if you had stayed another forty minutes.

Skipping is not quitting. Skipping is moving a stuck problem to a later slot so you can collect a problem you can actually finish. The people who look calm on the standings are not smarter every minute — they are better at leaving.

A working CF allocation for a 2-hour / 6-problem Div. 2, if A–C are in your range:

- 0:00–0:08 — read A–D. Note bounds and output type (the last lesson). Mark anything that looks like 'print any' or a standard trick. - A, then B — these are speed. If A takes more than ~10 minutes of coding after you understand it, you misread. Re-read Output. - The 20-minute rule. When you start a problem in earnest (thinking + first implementation), set a mental timer. If after about 20 minutes you have no invariant, no obvious construction, and no reduced brute, stop. Write one sentence of what you tried, open the next problem. - C and D are not ordered by your brain. Implementation-heavy B (simulation, 80 lines, nasty indices) can be slower than a clean constructive C. Graph D with n ≤ 2000 can be easier than a number-theory C if you have BFS and they have modular inverse. - Last 20 minutes. Do not open a new hard idea. Finish a coding problem you already understand, or go back to a skipped problem whose sentence you wrote.

ICPC changes the unit of skip. You skip with team consensus, and you skip the machine, not your head. One person can keep thinking about B on paper while the machine codes A. The 20-minute rule applies to machine time even more strictly: a teammate staring at a WA in the editor for 40 minutes is three people losing 40 minutes.

CHECK

Div. 2, 80 minutes left. A accepted. You have been implementing B for 25 minutes; still WA on test 2 after one patch. You have not read C. What is the highest-EV next move?

When is C actually easier than B? Look at shape, not letter.

- B is a simulation with many branches, dates, strings, or 'follow the process for n steps' where n is 10⁵ and you must find the closed form. Easy to think of, easy to WA. - C is constructive with an 'always possible if…' note. Once you believe the note, the code is a loop that builds the array. That is Rank-4 material, not Rank-3 graphs. - C is a graph you already have. n, m ≤ 2·10⁵, 'connected components' / 'shortest path unweighted' — you have BFS. B is a greedy with a lying example. - B needs a proof you do not have. If you cannot find a counterexample to your greedy and cannot prove it in ten minutes, it is not 'almost done.'

When is skipping wrong? A is unsolved. You do not have a compile. You are 30 seconds from typing the minirepro from the debugging lesson. You already know the construction and are only fighting an off-by-one — finish the off-by-one. Skip ideas, not typing a known fix.

CHECK

ICPC, 3 hours left, 3 people, 1 PC. A and C are solved. Teammate 1 is on the PC debugging a 90-line B (WA). Teammate 2 has a complete paper solution for D (standard Dijkstra, n ≤ 1e5). Teammate 3 is reading E. What should happen?

CHECK

Which situation is a reason to stay, not skip?

Time complexity belongs here too: skipping is a complexity filter on your remaining minutes. An O(n²) idea at n = 2·10⁵ is not 'almost right' — it is illegal, same as in Rank 1. Do not spend a skip-slot trying to squeeze a dead bound. Leave, find a problem whose bounds match a tool you have, come back if the set is empty.

Next lesson: the problems you skipped B for — constructives and ad-hoc — and how to recognize them in that first read.

Checks 0/3

Next lesson