The IT guru of CodeIT 2023/2024 on the journey to success
Oleksandr Kulkov, or “adamant”, is a competitive programmer from Zaporizhia, Ukraine, and an author of over 60 competitive programming problems. Oleksandr participated in coding competitions since school, and continued doing it in his university years, participating in ICPC regionals and other local contests. Oleksandr is one of two active maintainers of CP-Algorithms, and one of the main organizers of the Osijek Competitive Programming Camp (OCPC), a bi-annual international camp for university students to prepare for ICPC in Osijek, Croatia. Beyond that, Oleksandr also has experience teaching algorithms, data structures and formal languages at university level, and has a notable Codeforces blog which once made him a top-1 Codeforces contributor.
Can you tell us about your early interest in competitive programming and how you got started?
I started around my 8th or 9th grade in school. I’ve been enjoying Mathematics and Physics since a very young age and participated in local Olympiads. But I also really liked computers! I suppose it started from being fascinated by video games and wanting to develop them when I grow up. And then at some point I had a course teaching to code in C++, and I liked it so much! It’s somewhat hard to put into words, but the idea that you can control such a powerful and versatile machine as a computer by giving it precise logically structured commands, and the extent of just how much you can achieve by doing so really struck me.
Then, since I was doing math and physics Olympiads anyway, I also got in informatics Olympiads, and I really enjoyed the tasks in it, and I was also fascinated by the underlying theory of algorithms and data structures. My school wasn’t particularly strong in informatics, so I spent a lot of time studying on my own, mostly solving tasks from previous years, solving some local archives and reading tutorials from https://informatics.msk.ru. It allowed me to advance to national level, where I learnt about Codeforces for the first time, and well, participating in Codeforces rounds at that time was like starting anew for me, since it brought everything up to the whole new level.
What are some of the biggest challenges you faced while competing, and how did you overcome them?
The biggest challenge for me was psychological. Generally, when I compete, I’m mostly motivated by pursuing a certain sense of excitement. For me, in competitions this sense stems from two things:
– Doing something that I particularly enjoy.
– Standing out among the others.
And these 2 are actually pretty bad stimuli if your target is to score top in competitions. The main reason for this is, by “standing out” here I mostly mean doing something unusual, rather than simply achieving a high place. So, solving a problem that others typically do not solve would bring me more excitement than solving the same problems as everyone else, and achieving a higher rank from doing so.
And “doing something I particularly enjoy” also means that I would tend to be narrowly specialized in a selection of “favorite” unpopular topics (string algorithms, geometry, etc), while being somewhat mediocre in all the others, especially the popular ones, such as DP. And it would also mean that in actual contests I might focus on the problems that I “like” leaving easier problems that I “dislike” unattended. Oh, and of course, it also made me averse to training, as I would perceive it as a mostly boring and tedious activity which is not that exciting.
The situation above is a bit less of an issue with a proper team composition, as you may try to just drop unfavorable problems on your teammates, while trying to score some harder ones, which your teammates may be less likely to solve. But even in such scenarios, it entails a heavy risk, and serious competitors are not very likely to take it, so ultimately it was probably part of the reason why I wasn’t particularly popular as a teammate in my university years. Besides, it bites you back much stronger in individual competitions, which would mean that e.g. my rating on Codeforces wouldn’t be particularly prominent, decreasing my credibility as a teammate even further.
Now, how did I overcome this? Well, in some sense I didn’t, as I never made it to either IOI or ICPC WF.
On the other hand, the problems caused by these factors were getting me an enormous deal of stress, and as years went by, I learnt to accept this part of me, and simply allowed myself to keep doing what I like and avoid doing stuff that I don’t like. It might not be the best course of actions if your goal is a high competitive performance, but at the very least it greatly helps me to keep some inner peace, and I believe that this approach is what allows me to still enjoy competitive programming and keep it as a part of my life, while a lot of people whom I was competing against and losing to in my school and university years moved on from competitions and are not very active anymore.
As a grandmaster on CodeForces, what strategies and practices do you find most effective for performing well in contests?
Heh, in the meantime I’ve lost my Grandmaster rank again 🙂
I think a general piece of advice that would be relevant for myself is to avoid getting stuck in trying one particular approach to a problem. If you ever find yourself far behind everyone else, it’s a pretty strong indicator that your general approach to the problem is very far from intended, and you missed some simple observation. And the advice for such cases would be to try to maintain several potential solution directions, and explore them concurrently, rather than focusing on trying one approach.
For me personally, it is hard, and I still struggle to avoid getting tunnel visioned into just trying to do the same thing over and over again, hoping that this time, in this formulation it will work. No, it never works, you just need to unload your head and go in a direction that you didn’t consider before somehow completely. It’s much easier said than done, of course.
What motivated you to become one of the main organizers of the Osijek Competitive Programming Camp?
I used to participate in competitive programming camps a lot when I was a university student, and it was one of the most fascinating experiences in my whole life. I even kept trying to join with people I know online to further participate in Petrozavodsk camps when I graduated. And I participated at least twice, but since 2022, when Russia started an invasion against Ukraine, I really didn’t want to have any economic relations with Russian state entities, such as Petrozavodsk University. I figured that I might not be alone in this reasoning, but at the same time I really liked the format of programming camps, so I dropped the idea in a competitive programming Discord server, found a co-organizer, found a guy with connections to a potential host university, and then we somehow managed to make it happen.
Can you describe the goals and structure of the Osijek Competitive Programming Camp?
There are 2 people, me and Tähvend Uustalu at the organizational top of the camp. Usually, we also have some organizational support from the host university (e.g. they often manage payments and site organization for us). Besides that, each camp we have a team of authors spread across 7 different contests, who change from one camp to another. We usually reach out to potential authors on competitive programming platforms, such as Codeforces and various programming-related Discord servers. We also work with various sponsors who provide us with funds for the camp.
Speaking of our goals, I described my main initial motivation above, but on a broader level, there are a bunch of things that we want to address:
– We want to provide a quality experience for our participants. As we participated in a lot of camps ourselves, we generally have a good understanding of what we enjoyed and found useful in the camps and competitions and what we did not enjoy, and we’re trying to shape the camp in accordance with this vision, of course, also taking into consideration the feedback from our participants.
– We want to keep the camp accessible to the general audience. I think a lot of camps in the region had some issues with this in one way or another, for example setting large participation fees, or being invitational only. In OCPC, we maintain the camp open to everyone who wants to participate and strive to keep participation fees at a reasonable and affordable level, so that students can participate even if they don’t have a sponsor university to cover the fee.
– We want our camp to be a platform for problem authors to showcase their original ideas and get decently compensated for it. From the very beginning of the camp, we decided that, as a matter of principle, author compensation would be our priority. And for me personally, it’s not only to attract more authors (though it is of course a desirable result), but also to give proper respect where it is due, as preparation of ICPC level contests is very hard and demanding work. At the same time, we adhere to the spirit of Petrozavodsk camp of offering authors a lot of freedom to how they want to shape their contest. We trust our authors to use their best judgment, and so far, we believe that it benefited the camp, even when individual contests ended up somewhat different from more standard ones.
As a special guest at the upcoming CodeIT programming competition, what are you most looking forward to?
I’m not very well versed in marathon style competitions, though I participated in a few whiles in university. I’m a bit anxious because I wasn’t very good at them, and usually was better at more standard algorithmic challenges, but it’s nice to leave your comfort zone every once in a while, so I’m looking to see what the challenge is and what strategies everyone would use to solve it 🙂
What message or advice do you hope to convey to the participants of CodeIT?
Don’t be afraid to leave your comfort zone and explore things you never thought you would!
How do you see the future of competitive programming evolving, and what role do you hope to play in that future?
I think there is a certain tendency in competitive programming to focus more on ad-hoc problems and avoid any problems that may benefit those who are good in implementation or have a lot of advanced computer science knowledge. While it makes sense that problem styles change alongside the community, I’m personally not a big fan of the change, as I usually enjoy the problems in which you may gain or utilize some systematic knowledge about the problem’s topic.
From my side, I hope that not being very restrictive in problem styles for the Osijek camp will help people to remember that good problems come in all shapes and sizes, not necessarily in the strict adherence to whatever the current competitive programming meta is 🙂