Hello Codeforces!
This is not a round announcement, however.
I realize it's around 4 years since my last rated participation, and 3 years since my last problemsetting contribution. I think I have never said a proper goodbye to competitive programming since then.
I know, I know, this is not an airport, thus my departure is not mandatory. But after all, this is a free space of my blog entries after all. Besides, today is my 25th cake day, and I just feel nostalgic reflecting everything I have gone through. Thus, rather than just saying farewell, I'd like to, in an absolutely styled late attempt, jump on the trend and reflect on the past programming problems that I have authored.
My format would be a bit different though. I prefer to write in my own style and convey my thoughts the way I feel comfortable. ;)
Okay, first and foremost, I'll only consider those available in official Codeforces rounds. I've done quite a myriad of work in various local platforms that I couldn't even recall, so, yeah, pardon my goldfish memory.
1. Codeforces Round 538 (Div. 2) (Feb 2019)
Ah yes. The beginning of everything. I still remember working with cdkrot that day. They denied a whole bunch of simpleton ideas I've made back then. It was a struggle. At the end, I still somehow managed to pull out a proper Div.2 round. Would be cool enough.
Also, for a bonus, being able to cooperate with guys like GreenGrape and majk was a huge pleasure. And I can't thank you both enough.
# | Problem | Comments |
---|---|---|
1 | 1114A - Got Any Grapes? | A classic Div2A problem. Nothing much. The problem was crafted on the move, and the theme quickly followed with the might of our grape master here. Also, who included the duck song here again? I can't recall, but yeah, this is the final touch for a good meme. On a bonus note, I love that a full-fledged mincost maxflow solution actually passed this problem nicely. |
2 | 1114C - Trailing Loves (or L'oeufs?) | I honestly didn't realize this problem was well-known enough before that contest. No, really. Nobody in the team warned me either, so I would assume this was safe to go. The inspiration? Just my immense addiction with number theory and messing up with bases, that's it. For a funny thing, I love the fact that people actually messed up the actual 0 digit with imaginary "0" one from character equivalent to a decimal value of "10"/"20"/etc.. Kek. |
3 | 1114E - Arithmetic Progression | The climax of the controversy in this round. Hehe. This is kinda the most confusing problem to look back for me. It's simultaneously one of my proudest and worst work. We'll get through both. For the "worst" aspect, the solution of this one seemed really, really discrete. Two sections of the interactions didn't even connect that well, it was like I tried to merge two problems into one. But the best part... yes. The pretest fails. For a bit of context, at the beginning, the array would only have at most $$$10^5$$$ elements. However, I sensed some oddities in the randomization. I can't remember if it was from my script-generated input or my past model solution, but something didn't randomize properly in the range, slightly shifted to the left. At that point, I started digging into the GNU C++ library, and figured out the issue with rand() . From that moment, everything checked out. I started raising the size limit to $$$10^6$$$, and carefully tested to make sure I would generate a bunch of tests that would properly punish unwarranted randomization — which, you knew it, ended up as pretest 12 (and a bunch of other pretests after that). Honestly I felt really proud seeing you guys failing there a lot, I knew my doubt was on-point and I delivered quite a way to prevent this contest into a hackfest... or so I thought.One last thing, the hacks on randomizers with timestamp-based seeds were not my doings. At all. I would never do something like that. |
4 | 1114F - Please, another Queries on Array? | This one isn't even fully original — I took the idea from a practice problem I'd encountered during my training. If I remember correctly, the original problem asked for segment product, here I asked for the totient value of that product. Should spice things up a bit for those not yet knowing the totient function's property, and that would be it. Quite a generic segment-tree D1C/D2E if you asked me. |
2. Codeforces Round 554 (Div. 2) (April 2019)
The sequel. I have mixed feelings on it though. The problems were fine and safe enough, but I felt something was lacking. The breakthrough euphoria of the problemset wasn't really there this time, and I didn't really feel quite well. But at the end, it was a round going smoothly, and perhaps I couldn't have asked for more.
Funny that I only did one problem here despite being the representative again. But it can't really help, I was a bit overwhelmed (note that the two rounds are in pretty dense time span, and not to mention many of my ideas were also rejected as well).
# | Problem | Comments |
---|---|---|
1 | 1152B - Neko Performs Cat Furrier Transform | At first I intended this as a pseudo-graph problem which required a very simple BFS traversal. At least, that was the safest solution there. To be frank, the operation limit is so lenient here that you can use your imagination to come up with anything, as long as it's proven correct. That's it. Perhaps my fun with this problem was with the long cat more than with the code. |
3. Codeforces Round 614 (Div. 1)/Codeforces Round 614 (Div. 2) (Jan 2020)
Next hit. I actually got more time to prepare for this one, and even getting some new friends a long to cooperate with. Like, for obvious reasons, this should be my proudest work of all, despite there were still issues here and there. I felt like I really broke my limit that day.
For a bonus, trying to cooperate my favorite rhythm game into the theme was an unique experience. Although, seeing them again, many of the stories written (mainly D2A+D2B) were so horrible that the actual game's story writers would beat me to hell if they figured out. XD
# | Problem | Comments |
---|---|---|
1 | 1293B - JOE is on TV! | I don't like how I wrote the backstory for this problem. XD That aside, the inspiration coming to it was pretty neat to me, at the day I used to think of an old TV gameshow named "1 vs. 100" (or at least that was the English transliterated name? I don't remember the original Dutch one). The strategy going for this problem would also be simple by itself, so nothing special here. |
2 | 1292B - Aroma's Search | Maths. Again. The thing with my math problems is, there would always be something indirect about the solution that forced people to look a bit deeper to find out. This was one of them, and the effort of investigating that indirect clue was really just "a bit" deep. I just loved this one however, it really put to show how powerful power functions could grow. Now to the part I hate about it — the limits. Yes, I was really infuriated at people accusing me of weak testsets on this problem, and I swore to myself I have looked over everything I could. Until I saw one such solution that failed, to realize something I had swept away thinking "only a troll would do that". I was, either arrogant, or overestimating the lowest points. If I had actually lowered the limits, that would have helped quite a bit, but I didn't in the end. I felt like anything lower would make the test variety lost itself a bit, and might actually open up loopholes for pseudo/quasi-bruteforce solution that I hadn't realized. Tch, what a dilemma. |
3 | 1292D - Chaotic V. | This is it. The pinnacle of my problemsetting career. It went back a little bit with the theme of 1114E - Arithmetic Progression, which is throwing a mixture of aspects in a problem to make the hybrid end-result a harder one. This time, it worked better. The pattern with my math-related problems wasn't that hard to figure out honestly, one would immediately suspect prime numbers and such the moment they saw my name on the author list (and as if that "lowest prime divisor" keyword wasn't obvious enough). From then, the situation would be simple: - Figure out the whole network was a tree (this should be easy for anyone really thriving for Div1D hehe). - Figure out how the tree is structured (if a subtree exists, what characteristics will its root have over all its descendants. In this case, it's the largest prime divisor). Analyzing the core requirements would be enough to solve it, and this is the next part I loved in it. The solution would be really, really clean and neat, no need some complex copypasta libraries, just do your work. Heck, even my model solution in the editorial (the C++ one) just had about 70 lines, and that was counting all the declarations and such. On a side note, it's cute to see this problem rated as 2700. I was initially afraid that it might be too easy, since after all, I was just a newcomer orange. But hey, it finally worked out way better than I expected! |
4. Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!) (Mar 2020, collaborative work)
My last dance. Just some leftover ideas from the last one finding themselves places to shine.
# | Problem | Comments |
---|---|---|
1 | 1305D - Kuroni and the Celebration | Glad that this interactive problem didn't cause any controversy. I have a tendency of thinking on random problem ideas while sitting in a bus going either from home to campus and vice versa. This problem was the one using most of those moments in late 2019 and early 2020. I just couldn't ask better here. The query structure and query limit surely hinted towards the solution, but not too obvious. Implementation might take a larger toll this time, but hey, that would worth a D-level (and a 1900). Heh, and to think 1114E - Arithmetic Progression was 2200 rated... XD |
And that's it, my Codeforces portfolio fully recalled. Not too much in regular standards, but for a latecomer like me, this might just be enough.
For some final note, better have my thanks for neko_nyaaaaaaaaaaaaaaaaa for everything thus far in competitive programming. You have always been a thorn in my side in competitive days, and a true friend in real life, for both of those, I am really appreciated.
So, it's time to say goodbye. At least from Codeforces.
This profile would not be going anywhere, but I don't think I would resume to CP anytime too soon. I have my own life to clean up, and this sure will take a while.
Until next time.
Or perhaps, to my good friends, may we still see each other in the afterlife.
Happy birthday AkiLotus!
I remember when we first met on CP Community Discord many years ago and reading this blog made me remember the good times we had as we were both trying to become better at competitive programming.
You did very well in terms of the contribution to the community and being part of so many rounds is something very few people ever accomplish, even among those starting very early in life.
Last but not least, I will always be grateful to you for having had the opportunity to co-author the round 554, namely 1152C - Neko does Maths. Even though it was just a div2C, it made me realize I can set tasks and that's how I ended up setting so far tens of tasks at national and international programming contests, both OI and CF style. So a huge thanks for giving me the chance to start it all.
Thank you for everything and good luck in life! Maybe one day we'll end up seeing each other in person too :D
Hi Stef, it surely has been a long while!
I am quite flattered that our collaborative time had made such a great impact, and that your personal career has been shifted positively from it.
Really, let's just hope we got to see each other for real.
Yeah, we should do that one day, that would be quite cool!
edit: please don't downvote, or my recent blog will get deleted lol :(
Never say never! The rounds you did were very good, and I hope to see your problems in the future too. Even though I've stopped working for Codeforces long ago.