Happy New Year!
As I was reflecting on 2025, I realized that I should have posted more on this blog in general, especially regarding my first semester at Princeton. Here’s a post on my experience at the Greater NY Regionals last year, written around two months ago. I’ve edited the content a bit to make it suitable for the general audience. Hope you enjoy!
I woke up before 6 am on the day of the contest, but still had to rush out the door in order to make the bus before 7am. I chatted a bit with DY while walking to the pickup place. Everyone was there on time except for TH, who woke up shortly after we started traveling and had picked up the phone to his friend. Thus we waited around ten more minutes for him before heading off to Columbia. Moral of the story: make sure to wake up super early if there’s an important event that you absolutely cannot be late on!
The bus ride took at least an hour, so we arrived there at around 8:30 am. It has been a few years since I last travelled to NYC downtown, but slowly, I remembered all of the places I went to as a child; Penn Station, USS Intrepid, Central Park, and all those giant buildings and narrow streets. We stopped at the west entrance of Columbia University, where we were checked by security.
We wandered in the lobby, and soon I met a bunch of high school friends: SK, RA and NS. My close friend MK didn’t come because he’s saving his World Finals for another year. I thought my teammate DS was already in New York, but soon we discovered that he was still aboard the train heading towards us. I headed up to the third floor and grabbed a couple bagels, because I knew we wouldn’t have time for lunch due to the length of the competition.
After taking some photos with my friends, I headed back downstairs to partial register with my present teammate AJ and coach P. We received our nametags, login information, all that good stuff. D (DS) and A (AJ) were texting back and forth about the printouts, but thankfully D already took care of it (I didn’t know we could bring books; I guess I should’ve read the rules beforehand). D was also telling A to print out the treap implementation since the current one he had was incorrect, but I predicted that we probably didn’t need it since our goal was to implement most easier problems in time in the first place.
Luckily, I had spotted my room after I headed to breakfast — it was the same room that Likely AI (SK‘s and RA‘s team) was in! Me and A barely tested our login information until we had to go for the opening cermony.
The room was quite humid and hot. We first sat through a walkthrough demo of Kotlin as well as a bunch of promotionals from JetBrains, the main sponsor for our regionals. We also heard more recruiting videos from JetBrains and Jane Street. The message clear: they want to hire competent programmers who are willing to solve new, challenging problems, and what better place to look for these people than competitive programming competitions? It was quite informative but felt a bit long, since most of us were probably waiting anxiously for our dismissal.
Our keynote speaker was Bjarne Stroustrup, who founded the C++ programming language as a way to combine abstraction with low-level C features. I thought the material he talked about was quite interesting (which, indeed, became the main inspiration for the final paper for my freshman seminar). The talk rapidly transformed into Q&A, and it wasn’t until after the judges and staff had given us the contest logistics/rules that we were dismissed for the contest to start.
Some notable words of wisdom: “have fun”, “make memories”. Although many of us are there for a chance to qualify for the NAC, these phrases reminded me to focus both the experience I was about to have and the overall growth as a programmer and a person I’ve already experienced (and will continue to experience) through the many hours of training.
My team (Princeton 3) settled down soon, but unfortunately we were not given a clear signal to start, so we started about a minute late since we realized that other teams were opening the packages after the clock hit 11:15, which was when the online judge opened. I, having a tendency to jump on the easiest problems first, spotted F and G with short statements, and managed to solve them within the first few minutes. I still took longer than I expected, as I definitely felt the drag in my thinking process that was a result of inconsistency.
Although I proposed we use C++ for some harder problems, we eventually stuck with Python for implementation, since both of my teammates agreed it is easier to implement in Python because of the simplicity of syntax (which is mostly true). Thus, I was glad that I learned some Python in my physics labs, but to be fair, I was a bit bummed because I didn’t know enough Python to be able to implement medium-hard competitive programming problems.
D implemented A and B first, although I insisted that we should get F and G done first because they were very easy to solve and could reduce our penalty. I think they had the different strategy in mind to take it slow and steady, making up for penalty by the number of problems solved. Thus, I switched to C (since I saw geometry) until D finished implementing his solution for B (the first submission of which got WA), after which I showed him the formulas for F and G, both of which got accepted. I think we definitely could have gotten those problems much earlier, but it’s probably because my teammates were focused on solving more medium-hard problems rather than getting extremely fast solves.
We got G and fixed our B right after, and managed to solve I, which A and I (AI…pun intended!) figured out together. Problem I was an interesting graph problem where, similar to a BFS, you continue to add new squares to be checked until you run out of numbers, after which the final answer can be determined from the state. After that we honed in on E, K, J and L for the remainder of the contest, with me switching between C and E. Though both had simple problem statements, their solution is a lot more complicated than they seem, as only the top few teams were able to get AC on E before the scoreboard freeze. C was unfortunately not feasible, as I found out later that only top teams in East Division like MIT and Harvard were able to solve them. A figured out most details for K and both D and A implemented the solution, but for some reason we got TLE around 20 minutes before the end of the contest, which we were unable to debug. It might have been due to some constant factor or some small typo, because Princeton 2 got AC with the same idea.
At the end, we got 6 problems, which I’d say is a solid performance considering that we haven’t been practicing much over the past few weeks. After the scoreboard freeze, I knew that we at least got top 20, which is good for my first time.
Overall, I enjoyed working with my teammates, with D on most of the implementation, and A and I figuring out the main ideas. Although we didn’t qualify for NAC (not expected anyway), I learned a lot of great lessons:
- Team communication and synergy is important in ICPC. We didn’t have much of a strategy going in, and we also didn’t do practices, which would have benefitted us. To do well, I’m pretty sure the details should be sorted out in advance.
- Focus on number of problems. Pay attention to penalty, but not overly. It’s true that I focused a bit too much on penalty, forgetting that the # of problems solved is prioritized over penalty points. Honestly, I haven’t focused intensely on improving my range lately, but hopefully I will be able to do so in this upcoming spring semester.
- Implementation skills are key. D was able to implement fast in Python, and translate the ideas me and A had relatively quickly.
- Choose the right language. We used Python for all of our programs which might have turned out to be a mistake for K. Choose the most appropriate language to work with; if all members know Python, it may be advantageous to use Python for easy math/greedy problems and C++ for harder core algorithm/implementation problems. At the same time, it’s important to learn more than one language for competitive programming; Python/C++ is a great combo.
After we cleaned up the room, I went to the main lobby to discuss with my friends (and grab pizza, using using lid of a paper box as a plate lol). Likely AI also solved 6 problems, and the top Rutgers team solved seven, giving them a good chance for qualifying for Nationals. Unfortunately NS‘s team didn’t show up, so he soloed the competition on his own and fell asleep a few times (at least he got some good rest!). To everyone else, the problem set did seem more implementation heavy than usual, and there was a general consensus that some problems were either very cheesable or just hard to do. MK dmed me post-contest that he didn’t like E because “nobody wants to implement chess” in-contest (lol). Everybody also had a hard time on problems like B and K, since one had to be very careful to figure out all details right (read the problem carefully, think through the possible edge cases, implement in an organized fashion).
I also talked a bit with my coach P after the contest. He remarked that he was very happy with my performance, and asked if I enjoyed the experience. I replied that it was both a fun and rewarding contest, so he seemed quite happy at that. Unfortunately he was unable to take a look at the problem statements but he did look at some harder problems DY (a fellow Princeton contestant) showed him.
We headed to the closing ceremony to conclude the contest, and after watching the same videos from our sponsors JetBrains and Jane Street, the judge finally opened up the post-contest resolver. One team with sixteen submissions on A was awarded the Perseverance Award, and I realized they were the team sitting to our right during the contest. Quite amazing ICPC had this award for them!
We waited quite a while until we got to the top 20. Unfortunately we didn’t place up because we had pending wrong submissions. Princeton 1 (MO, TS, TY) was behind us before the freeze, but after solving K during the freeze they advanced to 10th overall, so congratulations to them. The final few teams (especially those from the same schools) battled ferociously for the top place, but eventually Cornell-Alpha, Columbia-0, and Yale Whale and stood on top for their respective schools, finishing 2nd, 3rd and 5th respectively. And our 2025 Greater NY Regional Champions was…
Princeton 2 (JH, DY, JR)!!! Huge congratulations to them! 🎉 Go Tigers 🐅
Although DY and I only exchanged a few words before the contest, it was very motivating to see him and his team qualify for the NAC. After the contest ended, I took a couple last selfies with SK, RA and NS before heading out with P, who wanted to take a group photo with all the Princeton people who were still there. Along the way I told him that I was excited that Princeton is going to the NAC yet again as well as seeing the trophy on the Princeton campus. P encouragingly told me that this will be me soon — a compliment that I’m very thankful for. 😁
Downstairs, I congratulated the winning team. D also told me that I had stacked a bunch of experience, so he believes I’ll be really good once I get to junior year. I do hope so, so definitely going to continue to train 💪
We got our team photos and concluded with a nice selfie with P. It was such a truly amazing experience getting to know and compete with all of these guys from our school!
Later, most people left as they were planning to do some other things in the city. I decided to go home with P, TY and D early since I figured it would be best to return to Princeton with people older than me (i.e. my coach, upperclassmen).
We took subway 1 back to 34th street, synonymous with Penn Station. I realized why my parents don’t like to travel to New York — you could find about any type of person in that city alone. Plus, there are tons of people. Once we arrived at Penn, everybody crowded towards Gate 7/8, which is for the NJ Transit that would take us back to Princeton Junction. It was truly a swarm — with only inches of space, we were all flocking towards the narrow doors (I really haven’t been to NY in a long time). I even observed how some people were sitting on the steps because they had been waiting for so long! Luckily we were mostly centered, so we got on the train in one round.
We had a great conversation on our train ride back, talking about a range of CS and Princeton-related topics from COS 226, teaching faculty, COD, Honor Code, programming systems, etc. Even though I didn’t have much to say, it was interesting hearing P and the upperclassmen discuss these topics, from which I learned a lot. I hope to have more experiences like these in the future!
I headed back to Princeton via. the Dinky; P was picked up. I soon went home to have dinner because the dining halls were already closed when I arrived.
Fun competition; until next year!