Three balloons hung up from our team’s table, signifying the three problems we were able to solve out of the 12 so far. Restless, I glanced at the neighboring teams and their balloons. Five, six, seven, I count. Pressured, I returned to wracking my mind. I tried revisiting the countless training sessions we had and the programming problems I’ve solved before for an inkling of a hint to solve what was now in my hands. The clock ticks, the final minute passes, and the contest hall chants a countdown from 10.
Did my team win ICPC Asia-Singapore Regionals 2018? No. Did we rank within the upper half of the teams in the contest hall? No. Did we stand a chance against the top programming varsity teams of Southeast Asia? I guess? One thing I’m sure of though, is that I’ve learned a lot of lessons from the entire experience — lessons that would prove invaluable for future contests, and if fate so plans it, my next (and last) ICPC.
Towards the International Stage
My first ICPC Regional was in my home country. My team and I tested ourselves in the 2017 ICPC Asia-Manila Regionals hosted by Ateneo de Manila University around a year ago.
A year ago, I could say that we had very shaky foundations. We only had a handful of training sessions, answered programming problems on UVA without a set training curriculum, and our minds were on other things in our academics. While we did try ourselves to some local contests here and there, we were fledglings in the stage of the ICPC.
At the end of the contest, we only solved one problem.
Perhaps the greatest lesson we learned (aside from the obvious “solve more problems” one) was that we needed a standardized training curriculum that gave us a well-rounded foundation of the prerequisites. If we wanted to aim for a better spot, we needed to be more serious and prepared.
The next ICPC was in Singapore, an entire year later. We knew we needed preparation. After a couple meetings, we settled on the following:
- Each of us bought a copy of Competitive Programming 3 (CP3) by Steven and Felix Halim (undoubtedly two of the biggest, if not the biggest, names in competitive programming). This book proved invaluable to say the least.
- We’d have weekly training sessions with some supplementary trainings in between.
- We’d up our team dynamics. Have specialists for certain topics, and make sure that we don’t leave any holes uncovered.
A year went by. Among the things that happend:
- We recruited more members from the freshmen batch. Upon advancing to their sophomore year, one of them eventually joined one of our three teams who was lacking a member.
- We learned C++ (although Java is still the predominantly represented language among our teams. Only one person — me — uses Python).
- Our coach got a corgi named Charlie as a therapy dog, which provided much needed support in times when morale is low.
- I learned how to not be afraid of Convex Hull.
We prepared as much as we can. Solved at least a hundred problems on UVA, learned as much data structures, tried our hand at countless variations of dynamic programming problems, and more. One of us even finished the entire CP3 cover to cover twice!
Our University then sent three teams to the qualifying round of the Asia-Singapore Regionals, all three of which qualified for a spot in the regionals. To boost our morale, our University agreed to fund the trip and sponsor us for the contest, making us the first teams in the history of De La Salle University, Manila to participate in an international ICPC!
All that’s left was to finish the last of our academic requirements, pack our bags, and fly to Singapore.
To The Lion City
With the cheers of our classmates and professors on our backs, we flew to Singapore to test our mettle against Asia’s finest. After booking a small hostel in Chinatown, trying out local cuisine, and learning how to use the train system, we’ve finally arrived to the day that we’ve been preparing for.
The ICPC Asia-Singapore Regionals 2018 was hosted by the National University of Singapore (NUS) School of Computing. A grand total of 50 teams from 10 countries competing made it (in Steven Halim’s words) “probably the most represented ICPC so far.” During the practice round on day one, each of us received pink ICPC shirts as well as free signed copies of Competitive Programming 3.18b, preview drafts of the planned Competitive Programming 4 in 2019!
The main contest was held on the second day. For anyone who’d want to see the problems themselves, here’s the Kattis link to the problem set.
The problem set was hard. Only three problems were solved by more than 40% of the competing teams. From the twelve problems, one of them was unsolved.
Among three teams in our University, one (Team Convex Hull) solved four problems. The rest of us (Teams Blackjack and Panic) solved three. In terms of rankings, we were at 36th place (Team Convex Hull), 41st place (Team Blackjack), and 47th place (Team Panic).
In contrast, the top two teams (Shanghai Jiao Tong University’s Platelet and National University of Singapore’s Send Bobs to Alice) solved 11 problems each.
Some of the things I’ve learned:
- CP3 is not enough. As written by the Halim brothers in the preface of the book, “much more than what this book can offer is requires to achieve [winning an ICPC.]” This proved true in the contest itself. While it provided us with the prerequisite material and techniques, it wasn’t enough to prepare us against problems we have never seen before. Nothing can replace experience.
- International ICPC is a way different ballpark than the local one. Perhaps this isn’t very surprising to most, but for first timers in an Internation ICPC, this realization hit us hard. I had a first taste of this back in Asia-Manila Regionals 2017 when everybody in the room was literally obliterated by NUS’ Team Pandamiao — who according to people wasn’t even their strongest team then.
- Our Curriculum is Lagging. In one of the solution sketches, the host mentioned “…one thing you can do is bipartite graph matching, which you should have learned already in your first year!” The thing is, I never learned bipartite graph matching in my first year.
- International Teams prepare harder. The top NUS team (Team Send Bobs to Alice) was composed of three freshmen. Compare that to our team composed of three seniors. For a lot of students in the international scene, they start training early, usually as contestants in the IOI or elsewhere. Their solved counts in UVA are also usually much higher than an average contestant. In addition, my coach went to visit some schools in Singapore and found out that they teach algebra and polynomials in early grade school. If that doesn’t picture the difference in backgrounds and education, I don’t know what does.
- International Teams prepare smarter. We talked to Steven Halim after the awarding ceremonies and found out that their teams train via mock competitions. This doesn’t only test individual skill and knowledge, but also tests the teamwork and technique in timed team contests. In addition, we also found out that NUS has an ICPC lab. Yes. A laboratory for training ICPC students.
Here are a few recommendations:
- We need more mock contests. Supplementary to the book, we need to assess ourselves as teams and not just as individual contestants. The team dynamics in a timed five-hour contest with only one computer is so much different from an open-timed practice session with three students with three laptops each.
- We need to read beyond CP3. The book will never be enough. While a prerequisite, there are still things left untouched. Truth be told, while discussing the solution sketches, a good solution for Problem A (Largest Triangle) was recommended whose algorithm wasn’t from any standard source — but from a recently published paper (Link) If this trend continues on, we may need to start reading papers too in order to discover new and better algorithms.
- Continue receiving institutional support. The programming varsity of De La Salle University is a fledgling group. While we have started to spread our wings, we are still far from getting to the top, and part of how we can get there is by getting the same amount of institutional support we received this year.
- We need a stronger academic backbone for sport programming. Our computer science curricula isn’t geared towards sport programming, as most freshmen students only get basic-to-intermediate data structures and algorithms, then shipped off to software engineering subjects in their latter years. Yes, I know that we cannot tailor our curricula to contest programming because not everyone wants to be a sport programmer, but we have to be reminded that good algorithmic solving skills aren’t just the skill of sport programmers — they’re supposed to be skills of every programmer. Whether or not our freshmen students want to do sport programming is irrelevant because such skills will nonetheless turn them into better software engineers in the future. Truth be told, most (if not all) top companies in computer science hire the best programmers through hard contest-level problems in the job interview. If we do up the ante on our data structures and algorithms classes, we have to do it in the early years and introduce more involved classes. Again, the top NUS team was made of three freshmen. If their freshmen can, ideally, so can ours.
Until Our Next ICPC
The Singapore Regionals was challenging. It pitted us against the cream-of-the-crop of the Asia-Pacific region in a five hour contest full of pressure and headaches for a spot in the world finals, as well as bragging rights as Asia’s top programmers.
While we didn’t win, we did learn a number of invaluable lessons that would influence the way we practice and train future generations of ICPC contestants from the University. Someday, perhaps, we may even be able to snag the top prize and represent Asia in the world finals.
Getting to that point, however, is no easy feat. We still have a lot of problems to solve, preparations to do, and things to learn. In the meantime, we’d have to assess our strengths and weaknesses, improve on them, and get our team dynamics to their peak.
As the curtains of the Asia-Singapore Regionals fall down on us, now we have to start preparing for the next challenge ahead. I’ve got one last ICPC lined up next year before I become ineligible. Before I get there though, I’d have to up my game and practice even harder.
Guess it’s back to solving UVA problems again, huh?
Originally published on my Medium Blog.