The ICPC NAC Experience (and other stuff)
Published Mar 24, 2026
#life #contestsThe ICPC Tryouts
Although I reached Master last summer, I wasn’t certain about qualifying for ICPC first team since I heard there was a veteran from the Chinese NOI (?) and potentially more strong people. He didn’t actually do that well but it gave me a scare…
Our first qualifier, the NAQ, already did not go so well for me. In hindsight I spent too long coding “steadily” and double checking solutions to not gather penalties when I should’ve just focused on speed-solving. I also encountered a weird stupid issue with C++ on B that wasted an hour of my time, and therefore failed to debug H in time. Without that issue, qualifying first was very doable.
The second qualifier went even worse. The week leading up to it I was a bit burnt out with schoolwork. But it was still enough to qualify onto our first team with my teammates Rain and Alex.
The ICPC Pacific Northwest Regionals
The regionals went smooth. Our region is quite strong with many other top schools, including Stanford, UWashington, Berkeley, etc. Heading up to the regionals we had strong performances in simulations of other regionals, so we were pretty confident going into it.
We had a great start, each doing some easy problems, with 4 first solves. In the middle of the contest, I managed to solve D, which ended up being the only solve on D! It was a hard problem that was also hard to implement, and Rain helped me through a lot of debugging.
You are given a simple connected graph of order with weighted edges. Output numbers: for each vertex , the distance to the farthest vertex from .
Solve this in .
—Source: 2025 ICPC PacNW Regional Problem D
Later, I also solved B after discussing with Alex, and with an hour remaining we looked onto I and J.
We completely misread J and far overcomplicated I. We didn’t end up solving either; it was a horrible last hour showing. We were definitely on track to winning the regional so it was a bit unfortunate, but we did achieve our goal of qualifying for the NA Championships.
The Putnam
I overslept and didn’t even attend.
The ICMT
2026 was the pilot year of the annual Intercollegiate Math Tournament at Columbia University in NYC. In late February I attended with what I consider a rag-tag team from UBC and UWaterloo. Sadly the weather was pretty cold and the city expectedly less vibrant than my visit last summer.
We did great in both the power and constellation rounds with immaculate teamwork.
However, our entire team threw the individual round, except my teammate Rain who did great. Our Placeholder Team Name was genuinely meant as a placeholder, we just forgot to enter an actual one later…
Despite the poor individual round we ended up in the top 10 teams overall. We prided ourselves in being the best team with no member from Harvard or MIT.
The ICPC NA Championship
The NAC was such a fun experience. Held in Orlando this year, we had a connection in Toronto. However, our first leg was so delayed that we were set to arrive after our second leg departed… Luckily, our second leg also got delayed and we ended up just making it after a good run in the airport.
Somehow we ended up being the first team to arrive and collect our team t-shirts. Just for fun, we opted for pink. I was surprised that most teams simply went with generic color choices.
The weather in March was near perfect in Orlando. Our team coach, Joel, had gone the previous year in May and mentioned that it was much hotter.
On the arrival day we went to a Texas BBQ place that attendees agreed was the “best food option around”. There we coincidentally encountered some well known figures of Competitive Programming, including tourist.
Even on the first day there we got a ton of merch.
There were tons of fun events scattered across the days, including a puzzlehunt-esque “escape room”, a career fair (with more merch!), and an activities night. The catering was really good throughout the trip; the ICPC foundation is pretty rich/their sponsors are…
There was fun Manifold Markets for betting on which teams would qualify to the World Finals, and we started at around a pretty reasonable 75%.
Before the actual NAC they held a couple of more casual competitions, none of which went well. There was a training camp competition, where we got stuck with some faulty implementations on C.
Then there was a Citadel challenge that was some data processing implementation with Python. It was more of a reading comprehension challenge and the interface was pretty bad, so everyone hated it. Alex is a Masters student in data science but he let us down (just kidding!).
The OpenAI heuristic challenge had several nice problems. We pretty much got all of the problems except A on paper, but we had another faulty implementation on D and also trolled B. It was so bad that we were one of the worst teams.
Then on the dress rehearsal competition we stress tested the judging server’s speed and memory capacities, a standard procedure, incurring some fake penalties in the process. Somehow none of the other teams did similar testing, I believe. This led us to show 20+ WAs on A, and we were again one of the worst teams on the scoreboard.
After all this our Manifold Markets chances dropped to 50%.
The rest of time leading up to the competition day was pretty relaxed. We talked to some other teams, some sponsors, watched a movie, took some walks at night, groupsolved a Codeforces Div. 4 in 15 minutes and still lost to tourist, the usual.
We had a bad start to the actual competition. One of the easier problems, F, I solved quickly on paper with a idea. But I much overcomplicated it and was confused as to why so many teams had solved it at that point. Worse off, it TLE’d. Only much later did Rain find a simplification to that I missed.
Later, Alex also got stuck on M’s implementation. Thankfully, at least Rain had no issues. For teams around the World Finals cutoff, the bottleneck was solving A, a medium-hard problem, and then solving at least one of the hard problems C, D, J. Almost no one solved B, G, L.
Thankfully I regained composure by solving A, and then quickly fixing F. Then, Alex managed to quickly fix M. In the span of 15 minutes we went from a very poor placement to 9th before the scoreboard freeze.
Although top 16 qualify unconditionally, at this point we threw too much penalty on F and M. So we weren’t safe and definitely had to solve at least one of C, D, J. I had already spent some time thinking about D, and was close, so we all went to think about it. Then, Rain decided to give C a read, and quickly realized it was not too bad.
Just like D in the regionals, C was again about a connected graph of order with edges — a pseudotree with one cycle.
You are given a simple connected graph of order with weighted edges. You can remove some edges, but are given pairs of vertices which must remain connected. What is the maximum total weight of edges you can remove?
Solve this in .
—Source: 2026 ICPC NAC Problem C
The first half the solution was pretty easy but long to implement, and Rain went to code. I kept thinking about the second part, which was conceptually trickier to solve. In hindsight I should’ve went to code since I type faster and had solved regionals D. Once Rain had finished, I also solved the second part with a linear range DP idea. Rain came up with the lazy segtree idea in the official solution, which we agreed might be less error prone.
There was less than 20 minutes at this point, and we ended up solving C with 1 minute remaining. The rest of the competition was some insanely clutch teamwork.
T-20 minutes: Rain went to type up the Lazy Segtree template while I figured out details, and when he started to type range queries I realized we didn’t need it, only global query. Even this probably saved a minute.
T-15: Rain finished typing and I went to implement the last part.
T-10: It WAs on sample tests. We log a lot of stuff to debug it.
T-7: Rain realizes I may have missed a case and goes to write it.
T-5: Rain fixes it but it still WAs samples.
T-3: I realize Rain may have used two variables in an incorrect order. He swaps them.
T-2: It ACs on sample tests. We comment out the tons of debug logs.
T-1: We submit. It ACs!
This secures our World Finals qualification and importantly we edge out a higher placement than UofT :). In the end this year’s cutoff was top 18, and we would’ve qualified without C, but it was an exhilarating experience. Overall it wasn’t the best, if my start wasn’t so terrible I’m pretty certain we would’ve also solved D, and possibly just barely a Bronze medal. But I’m sure other teams were facing some issues too.
My favorite type of graph is now the unicyclic graphs.
Excited for the World Finals in Dubai, which may change location depending on world events…
Research and Work
Over the past few months I spent some time doing supervised research in extremal set theory and combinatorics, proving some small results and failing to prove bigger results, which has been pretty fun. In general my interest in pure math has honestly been slipping a lot though. I find myself far more interested in statistical fields and especially modern machine learning. It really stands at my ideal intersection of software, algorithms, research, hype, and some (applied) math.
Job search has been brutal but I was lucky to get a LLM research position at one of Huawei Canada’s labs. What the teams are working on seems extremely fun and I’m excited.