Citadel / Citadel Securities 2026 SDE Intern OA remains one of the hardest-to-calibrate gates in quant recruiting: problems sit around LeetCode Medium, but scoring depends heavily on edge-case coverage and code efficiency — community pass rates stay under 25%. This guide walks through the platform, the three high-frequency question types, the timing plan, and the most common traps based on Spring 2026 recalls.
OA Platform and Pacing
| Item | Detail |
|---|---|
| Platform | HackerRank |
| Problems | 3–4 coding |
| Time | 70 min (some streams 70 + 30 short answer) |
| Difficulty | LC Medium → Medium-Hard |
| Languages | Python / C++ / Java |
| Scoring | Tiered test cases with hidden corner cases |
Citadel's HackerRank instance uses auto-graders plus hidden test sets — it's common to see sample cases pass but the final score land at 60 because one hidden test catches an edge bug.
Three High-Frequency Question Types (Spring 2026)
Type 1: Order Book / Trading Simulation
Given an order stream (BUY / SELL / CANCEL), simulate matching and output each trade's price and the final position.
Key moves:
- Two heaps:
buy_heap(max) andsell_heap(min) - Each new order checks the opposing book first
- CANCEL supported via lazy delete (mark, then skip on pop)
import heapq
from collections import defaultdict
def match_orders(orders):
buy = []
sell = []
cancelled = set()
trades = []
for op, oid, side, price, qty in orders:
if op == "CANCEL":
cancelled.add(oid)
continue
if side == "BUY":
while qty and sell:
while sell and sell[0][2] in cancelled:
heapq.heappop(sell)
if not sell or sell[0][0] > price:
break
sp, sq, sid = heapq.heappop(sell)
m = min(qty, sq)
trades.append((oid, sid, sp, m))
qty -= m
if sq - m > 0:
heapq.heappush(sell, (sp, sq - m, sid))
if qty:
heapq.heappush(buy, (-price, qty, oid))
else:
while qty and buy:
while buy and buy[0][2] in cancelled:
heapq.heappop(buy)
if not buy or -buy[0][0] < price:
break
bp, bq, bid = heapq.heappop(buy)
m = min(qty, bq)
trades.append((bid, oid, -bp, m))
qty -= m
if bq - m > 0:
heapq.heappush(buy, (bp, bq - m, bid))
if qty:
heapq.heappush(sell, (price, qty, oid))
return trades
Time O(n log n) Space O(n)
Type 2: Greedy Simulation / Resource Allocation
Given tasks (start, duration, priority) and m workers, output how many tasks each worker completes.
Key moves:
- Min-heap tracks workers' next-free time
- Pop the earliest-free worker for each incoming task
- Watch for tie-breaks when multiple workers free up at the same instant
import heapq
def allocate_tasks(tasks, m):
tasks.sort(key=lambda t: (t[0], -t[2]))
workers = [(0, i) for i in range(m)]
heapq.heapify(workers)
count = [0] * m
for start, dur, _ in tasks:
free_at, wid = heapq.heappop(workers)
actual = max(free_at, start)
heapq.heappush(workers, (actual + dur, wid))
count[wid] += 1
return count
Time O((n + m) log m)
Type 3: Bit Manipulation / Number Theory
Given an integer array a, return the sum of XOR over all subarrays mod 1e9+7.
Key moves:
- O(n²) brute force will TLE
- Decompose by bit and compute each bit's contribution independently
- Use prefix XOR for subarray XOR
MOD = 10**9 + 7
def sum_subarray_xor(a):
ans = 0
for b in range(30):
ones = 0
zeros = 1
pref = 0
contrib = 0
for x in a:
pref ^= (x >> b) & 1
if pref == 1:
contrib += zeros
ones += 1
else:
contrib += ones
zeros += 1
ans = (ans + contrib * (1 << b)) % MOD
return ans
Time O(n · 30)
70-Minute Pacing Plan
0–5 min Read all 3 problems, rank by difficulty
5–25 min Fully AC the easiest one
25–55 min Attack the highest-confidence problem (with edge coverage)
55–65 min Attempt the third, at minimum pass sample
65–70 min Re-check every submission for syntax errors
Key: Citadel doesn't require a full AC sweep. Two complete > three half-finished.
Common Traps
- Starting to code without reading all problems (miss the easiest one)
- Default
intbeing 64-bit silently overflowing (especially C++) - Hidden tests trip on: empty input, single element, all-equal, all-opposite
- Stable order ignored — problem says "preserve input order" but you used sort
- Last-five-minutes edits leaving an unsubmittable syntax error
Is Citadel the Same as Citadel Securities?
Two different OAs:
| Item | Citadel (HF) | Citadel Securities (Market Maker) |
|---|---|---|
| Direction | General SDE algorithms | Quant / low-latency / bit ops |
| Time | 70 min | 90 min |
| Math share | Low | High (probability / expectation) |
| Platform | HackerRank | HackerRank |
Applicants to Citadel Securities also need probability and expectation review.
What High Scorers Look Like
Among our students who scored 100 on Citadel OA, the shared pattern is two problems fully AC + the third passes sample at minimum. Our OA assistance starts with an ability assessment and then targets the weak topic for drilling.
For pricing and slots, ping WeChat Coding0201.
FAQ
What's the Citadel OA pass threshold?
Community recalls place it around 70–80 (out of 100). Top candidates land 90+ to reach phone screen.
Can I use ChatGPT during the OA?
No. HackerRank webcam + tab-tracking proctoring is active; suspected cheating leads to an immediate reject.
Will Python TLE?
Some problems (order book in particular) are tight in Python. Use C++ or PyPy — Citadel's HackerRank supports PyPy.
What's the post-OA flow?
OA pass → HR phone → 1–2 technical phones → Superday (3–5 onsite rounds). Superday pass rate ≈ 25%.
Preparing for Citadel, Jane Street, Two Sigma, HRT, or IMC OAs?
oavoservice continuously tracks OA and VO real questions across quant and HFT firms. Mentors come from front-line quant / SDE teams and offer typed drilling, order book and probability specials, and HackerRank pacing mocks in our OA assistance program.
👉 Add WeChat: Coding0201 — Get the Citadel OA prep package.
Contact
Email: [email protected]
Telegram: @OAVOProxy