Chapter 13: The National Stage
The Korean Collegiate Programming Championship was held in a convention center in Suwon that smelled like new carpet and old anxiety.
Two hundred and forty contestants from thirty-two universities, packed into a hall the size of a basketball court, each seated at identical workstations with identical monitors displaying an identical countdown clock: 00:04:32 until start. Officials in matching polo shirts patrolled the aisles. Cameras from three tech media outlets lined the back wall. A banner above the stage read: KCPC 2006 — Code the Future.
Dojun had not planned to be here.
The spring contest at SNU had been strategic—a controlled performance designed to build credibility while staying under the radar. But the radar had found him anyway. His second-place finish, combined with the colloquium and the accelerated track, had generated enough buzz that when the KCPC selection committee reached out to SNU for their top contestants, Kim Taesik had submitted Dojun’s name without asking.
“You need the credential,” Kim had said when Dojun protested. “A national competition result is the kind of context that silences questions. Win or place, and nobody asks how a sophomore knows what you know. They just say, ‘Oh, he’s the KCPC winner.’ That becomes the story.”
“And if I draw attention I can’t explain?”
“Then explain it. You have a publication, a research position, and a recommendation from me. You’re not an anomaly anymore, Park. You’re a prodigy. Act like one.”
So here he was. Contestant #147, SNU, seated in Row M between a nervous freshman from Yonsei and a stoic senior from POSTECH who hadn’t blinked in four minutes.
The Yonsei freshman turned to him. “You’re Park Dojun, right? The SNU guy who solved all five at the spring contest?”
“That’s me.”
“I read your solutions online. The Problem E brute force with pruning—that was genius. My professor assigned it as homework. Half our class couldn’t reproduce your approach.” He extended a hand. “Cho Sunwoo. First year. I’m going to get destroyed today, but at least I can say I sat next to you.”
“You’ll do fine. Read each problem twice before—”
“Before coding. I know. Someone posted your advice from the SNU contest on the programming forum. ‘Read twice, code once.’ It’s practically a meme now.”
Dojun blinked. His casual advice to the nervous junior at the SNU contest had become a meme. The internet, even in 2006, moved fast.
“Just do your best,” he said. “The problems are hard, but they’re fair.”
“Easy for you to say. You and Seokho are going to be fighting for first while the rest of us fight for survival.” Sunwoo grinned, nervous but genuine. “Good luck, hyung.”
“Good luck to you too.”
And twelve rows ahead, Contestant #34: Jang Seokho, KAIST. Before finding his seat, Seokho had walked the entire aisle to Dojun’s row, stopped, and said exactly three words: “No holding back.”
“Good morning to you too,” Dojun had replied.
“I don’t waste time on greetings before a contest. Greetings are post-competition protocol.” He had turned and walked back to his seat without another word.
The POSTECH senior on Dojun’s other side had watched this exchange and whispered, “Is he always like that?”
“Always.”
“Terrifying.”
“You get used to it.”
Now, with four minutes left, Dojun pulled out his phone for one last check. A text from Hana, sent twenty minutes ago: I’m watching the live scoreboard from the jjigae place. The ajumma thinks I’m crazy for staring at a website about computers. I told her my partner is competing nationally and she said “The thin boy? Tell him to eat first.” Bring home a trophy. Bridge needs a founding myth.
A text from his mother: I lit a candle at the temple this morning. The monk asked what it was for. I said my son is in a computer competition. He didn’t know what that meant but he blessed you anyway. Good luck, Dojun-ah.
And one from Seokho, sent that morning: Same rules as last time. Don’t hold back. I want a real contest, not a performance.
Dojun had typed back: No promises.
Seokho: That’s the first honest thing you’ve ever texted me.
The countdown hit zero. Eight problems appeared on screen.
Eight. Not five. The KCPC was a different beast than the university contest—more problems, harder problems, five hours instead of three. The scoring rewarded both speed and completeness, with partial credit for solutions that passed some but not all test cases.
Dojun scanned the problem set. His previous life’s experience classified them instantly, like a chess master reading a board:
Problem A: Warm-up. String manipulation. Five minutes.
Problem B: Graph theory. BFS with constraints. Fifteen minutes.
Problem C: Dynamic programming. Classic knapsack variant. Twenty minutes.
Problem D: Computational geometry. Convex hull with modifications. Thirty minutes.
Problem E: Number theory. Modular arithmetic with large primes. Twenty-five minutes.
Problem F: Advanced graph theory. Minimum spanning tree with dynamic edge weights. Forty minutes.
Problem G: String algorithms. Suffix automaton construction. Thirty-five minutes.
Problem H: The boss problem. A combinatorial optimization challenge that combined elements of network flow, game theory, and constraint satisfaction. In competitive programming circles, this was the kind of problem that separated the top 1% from everyone else.
Dojun could solve all eight. He knew this with absolute certainty. The question, as always, was how many he should appear to solve.
But Seokho’s words echoed: Don’t hold back.
And Kim Taesik’s words: You’re a prodigy. Act like one.
And Hana’s, from a text she’d sent that morning: Bring home a trophy. Bridge needs a founding myth, and “our CTO won the national coding championship” is a pretty good one.
He put his fingers on the keyboard.
And for the first time since waking up in 2006, he stopped holding back.
Problem A fell in three minutes. He didn’t bother with theatrics—no deliberate pauses, no fake wrong approaches. Clean solution, submit, accepted.
Problem B: seven minutes. BFS with a priority modification that he implemented from muscle memory.
Problem C: twelve minutes. The knapsack variant required a state space optimization that would have taken most contestants thirty minutes to figure out. Dojun saw the optimization in the first reading and coded it directly.
Twenty-two minutes in. Three problems solved. He checked the scoreboard.
Seokho: three problems. Twenty minutes. Two minutes faster.
A grim smile. The race was on.
Problem D: computational geometry. Convex hull. Dojun’s implementation was textbook-clean—Andrew’s monotone chain algorithm with a sweep line modification for the problem’s specific constraints. He caught one edge case that would have tripped most contestants—collinear points on the hull boundary—and handled it with a three-line check that he wrote without hesitation.
Submitted at thirty-eight minutes. Accepted.
Scoreboard: Seokho had solved D at thirty-five minutes. Still three minutes ahead.
Problem E: number theory. Modular exponentiation with Chinese Remainder Theorem reconstruction. The math was dense but familiar—Dojun had implemented modular arithmetic libraries for Prometheus Labs’ cryptographic systems. He wrote the solution in fifteen minutes, taking time to verify the modular inverse computation because getting that wrong would mean wrong answers on all test cases.
Submitted at fifty-three minutes. Accepted. Five problems.
Seokho: five problems. Fifty minutes.
Three minutes. The gap was consistent, stubbornly fixed, as if they were connected by an invisible elastic band that neither could stretch nor break.
The convention hall was buzzing now. On the media screens, the live scoreboard showed two names pulling away from the field: Seokho and Dojun, both with five problems solved, both faster than anyone else by a significant margin. Third place had four problems.
A murmur rippled through the audience section. Dojun couldn’t see the audience from his workstation, but he could hear the whispers, the shifting of chairs, the particular quality of attention that a crowd gives when it realizes it’s watching something extraordinary.
Problem F: minimum spanning tree with dynamic edge weights. This was where the contest got serious. The problem required computing an MST that could efficiently update as edge weights changed—a problem with applications in network routing and infrastructure optimization.
The standard approach was Kruskal’s algorithm with a union-find structure, but the dynamic updates made the naive approach too slow. The optimal solution used a link-cut tree—a sophisticated data structure that Dojun had used extensively in his industry career but that was rarely taught at the undergraduate level.
He hesitated. Using a link-cut tree would be a clear signal of expertise beyond his supposed level. Most contestants at the KCPC wouldn’t even know the data structure existed.
Don’t hold back.
He coded the link-cut tree. It took twenty-two minutes—longer than it should have, because link-cut trees were implementation-heavy and he was being careful about edge cases. But the code was clean, the logic was correct, and when he submitted, all test cases passed.
Submitted at seventy-five minutes. Accepted. Six problems.
Scoreboard: Seokho had solved F at seventy-one minutes. Also using a link-cut tree—Dojun could tell from the submission time, because no other approach would have been that fast.
Four minutes behind now. The gap was widening.
Problem G: suffix automaton. String algorithms were Dojun’s weakest area in competitive programming—not because he couldn’t solve them, but because suffix automatons were one of the few data structures he hadn’t used extensively in his professional career. He had learned them academically but never internalized them the way he had graph algorithms or dynamic programming.
He built the automaton carefully, line by line, checking the transition functions and suffix links against his mental model. One bug—an off-by-one error in the suffix link construction—cost him eight minutes of debugging.
Submitted at one hundred and twelve minutes. Accepted. Seven problems.
Seokho: seven problems. One hundred and three minutes.
Nine minutes behind. The gap had nearly doubled on Problem G. Seokho’s string algorithm skills were better than his—or rather, Seokho hadn’t made the off-by-one error. In competitive programming, the difference between good and great was often measured in bugs not made.
One problem left. Problem H. The boss.
Three hours and eight minutes remaining.
Problem H was a monster.
The statement was deceptively simple: given a grid of cities connected by roads with varying costs, a set of resources distributed across the cities, and a fleet of vehicles with limited capacity, find the minimum-cost route that collects all resources and returns to the origin.
It was a variant of the Vehicle Routing Problem—NP-hard in the general case, but this instance had constraints that made it solvable with the right approach. The grid structure limited the number of meaningful routes. The vehicle capacity constraints could be handled with a state-space reduction. And the cost function had a property that allowed dynamic programming over subsets.
Dojun recognized the structure immediately. This was, at its core, a Hamiltonian path problem on a subset of the grid, optimized with bitmask dynamic programming. He had solved variations of this problem dozens of times in his career—logistics optimization had been one of Prometheus Labs’ early product areas.
He started coding. The state representation: a bitmask for visited cities, the current position, and the remaining vehicle capacity. The transitions: move to an adjacent city, pick up a resource (if available and if capacity allows), or return to origin. The optimization: minimize total cost.
The implementation was complex—over a hundred lines of C++, with careful handling of the state space to avoid memory overflow. But the logic was sound, and Dojun coded it with the steady confidence of someone who had done this before.
At the ninety-minute mark, he had a working solution. He tested it on the sample cases. All correct.
But something nagged at him. The time complexity of his solution was O(2^N × N² × C), where N was the number of resource cities and C was the vehicle capacity. For the problem’s constraints—N up to 20, C up to 100—this was tight. Very tight. It would pass, but barely.
He could optimize further. A meet-in-the-middle approach would reduce the exponential factor. A more careful state representation could eliminate redundant computations. But each optimization would take time—time that the straightforward solution might not need.
He submitted the straightforward solution.
Test case 1: Accepted. Test case 2: Accepted. Test case 3: Accepted.
Test case 7: Time Limit Exceeded.
The larger test cases were too slow. His solution was correct but not fast enough.
Damn.
He looked at the clock. Two hours and twenty minutes remaining. Plenty of time to optimize.
He glanced at the scoreboard. Seokho had not yet submitted Problem H. He was still working on it—the submission log showed no attempts.
This was it. The moment where the contest would be decided. Whoever optimized Problem H first would win.
Dojun dove back into the code. The meet-in-the-middle optimization split the bitmask into two halves, computed solutions for each half independently, and combined them. It was conceptually straightforward but implementation-tricky—the combination step required careful merging of partial solutions with compatible vehicle capacity states.
He coded for twenty minutes. Tested. The optimization worked—the runtime dropped by a factor of fifty. He resubmitted.
All test cases: Accepted.
Submitted at one hundred and fifty-two minutes. Eight problems. All eight.
He leaned back and checked the scoreboard.
Seokho had submitted Problem H at one hundred and forty-eight minutes. Also accepted. Also all eight.
Four minutes faster. Seokho had won.
The final standings appeared on the main screen:
1st: Jang Seokho, KAIST — 8/8, 148 minutes
2nd: Park Dojun, SNU — 8/8, 152 minutes
Third place had solved six problems.
The hall erupted. Two hundred and forty contestants, their coaches, the media crews, the officials—everyone was staring at the scoreboard with the particular disbelief of people witnessing something that hadn’t happened before.
Because it hadn’t. In the twelve-year history of the KCPC, no one had ever solved all eight problems. No one. The previous record was seven, held by Seokho himself from last year.
Today, two people had solved all eight. And they had finished four minutes apart.
The awards ceremony was longer and more formal than the university contest. Cameras flashed. Officials gave speeches. The KCPC chairman, a silver-haired professor from POSTECH, presented the trophies with the ceremonial gravity of someone handing over national treasures.
Seokho received the first-place trophy—a crystal obelisk that caught the convention center’s lights and scattered them like a prism. Dojun received the second-place trophy—identical, but slightly smaller. They stood side by side on stage, holding their crystals, while cameras captured the moment.
“Four minutes,” Seokho murmured during the photo session. “You’re getting closer.”
“Or you’re getting slower.”
“Impossible. I’ve been optimizing.” The hint of a smile. “Your Problem H approach—meet-in-the-middle on the bitmask DP. I used a different optimization. Subset convolution with Möbius inversion.”
Dojun’s eyebrows rose. Subset convolution was a technique from algebraic combinatorics—theoretical, beautiful, and almost never used in competitive programming because few people understood it well enough to implement under time pressure.
“That’s an unusual choice,” Dojun said.
“I read a paper on it last month. By Björklund, from Uppsala. It’s not published yet—I got a preprint.” Seokho held his crystal trophy at arm’s length and examined it. “You know what I like about you, Park? Most people in this room solved four or five problems and consider it a good day. You and I solved all eight and we’re standing here comparing optimization techniques. We’re not competing against them.” He gestured at the hall. “We’re competing against each other. And against the problems themselves.”
“Is that lonely?”
The question slipped out before Dojun could filter it. Seokho looked at him with an expression that was, for once, unguarded—a flash of surprise followed by something more vulnerable.
“Sometimes,” he said quietly. “But less so since March.”
Since March. Since the SNU contest. Since they had started this strange, intense, unexpectedly meaningful rivalry that was becoming, whether either of them admitted it, a friendship.
“Same,” Dojun said.
The photographer called for one more pose. They held up their trophies. The camera flashed.
After the ceremony, the real chaos began.
Three media outlets wanted interviews. Two professors from universities Dojun hadn’t heard of offered research positions. A representative from Samsung’s semiconductor division handed him a business card and said, “When you graduate, call us. Whatever they’re paying you, we’ll double it.”
“I’m a sophomore,” Dojun said. “Nobody’s paying me anything.”
“Even better. We’ll triple nothing.”
He navigated the crowd with the practiced smile of someone who had done this a thousand times in his previous life—handshakes, business cards, polite deflections.
The Yonsei freshman—Sunwoo—found him in the crowd. “Hyung! I solved four! FOUR! That’s a personal record by two!” He was practically vibrating with excitement. “Your advice worked. I read everything twice. I caught three bugs before submitting.”
“Four is great. That’s top thirty percent.”
“Top thirty percent at nationals. My mother is going to cry. She still doesn’t understand what I do, but she understands percentages.” He shook Dojun’s hand with both of his. “Seriously. I sat next to you for luck. Best decision I ever made.”
“You did the work, Sunwoo. The luck was yours.”
“I’m telling everyone we’re best friends now. Hope that’s okay.”
“We met three hours ago.”
“Best friends don’t need time. They need shared trauma. And five hours of competitive programming is definitely shared trauma.” He bounced away into the crowd, already composing what was undoubtedly a group chat message of epic proportions.
The only formal interview Dojun accepted was with a reporter from the university newspaper, a nervous student journalist who asked three questions and spent most of the time staring at the trophy.
His phone was exploding. Seventeen texts, four missed calls.
Minjae: EIGHT OUT OF EIGHT??? I’M NOT WORTHY TO BE YOUR PROJECT PARTNER. I’M GOING TO BUILD A SHRINE.
Hana: I just saw the results online. Park Dojun. All eight problems. Second in the nation. I’m sitting in the jjigae place and the ajumma asked me why I’m grinning at my phone. I told her my partner just broke a national record. She said “good, he needs to eat more.” I agree with her on both counts.
Kim Taesik: Well done, Park. Your context is now bulletproof. — Kim T.
His mother: Dojun-ah, Sangchul showed me the internet article. I don’t understand what you did but they say you’re second in the country? FOR PLAYING COMPUTERS? Come Saturday. I’m making galbitang. And bring the trophy. Mrs. Choi wants to see it.
And one text from Seokho, sent while they were standing two feet apart on stage: Next year, I’m not giving you four minutes. I’m not giving you four seconds. Prepare accordingly.
Dojun typed back: Next year, I won’t need them.
He pocketed his phone, tucked his crystal trophy under his arm, and walked out of the convention center into the Suwon evening. The summer heat was fading into a warm dusk, the sky streaked with orange and purple above the city’s skyline.
Eight problems. All eight. The first time in KCPC history that two contestants had achieved a perfect score.
And somewhere in the convention center behind him, coaches and professors and industry scouts were already asking the question that Dojun had been trying to outrun since March:
Where did Park Dojun come from?
He didn’t have an answer they would believe. But he had something better now—a paper trail of achievements, a mentor’s endorsement, a rival’s respect, and a growing reputation that was, slowly, becoming its own explanation.
The prodigy from SNU. The quiet kid who solved eight problems. The sophomore who didn’t make sense but couldn’t be ignored.
The story was taking shape. Whether it would hold was another question entirely.
But tonight, under a summer sky, with a crystal trophy and a phone full of messages from people who cared about him, Dojun allowed himself a moment of pure, unedited happiness.
He had earned it. Both times.