Saturday, April 7, 2018

How to excel at Competitive Programming | ft. FFAO from Codeforces

Hi guys! ✋
rachit jain blog, Rachit Jain, rachit jain iit roorkee, rachit jain iitr, rachit iitr,rachit codechef, rachit hackerrank, rachit jain microsoft

I got the opportunity to talk to one of my favorite coders. I remember I used to read comments by ffao and just see how great his rating curve is and how soon he came red on Codeforces.

So I made a video on YouTube where ffao answered a lot many questions about competitive programming and how one can excel in this field.

My screencast software got some issues and we got a poor video quality and I sincerely apologize to ffao and the audience.

I can't ask ffao the time to again record with me, and I was almost sure of not uploading the video. But the audio is great, and I decided to have it on my YouTube channel. 

You can watch the video here.

You can also refer this blog post to have a summary of what we discussed in the video.
  • What's your educational background?
    • ffao: I have a five-year bachelor’s degree in Computer Engineering from Instituto Tecnológico de Aeronáutica (ITA), a Brazilian university
  • When did you start programming?
    • ffao: I wrote my first program when I was 13, as with a lot of people that happened because I really liked video games and wanted to know more about making them (spoiler: turns out it’s actually quite time-consuming). At that point I could only make very simple programs, like “type in a number and the program tells you if it’s even or not”, but I picked up more as I went along.
  • Why does math background help?
    • ffao: I can’t even pinpoint where the math ends and the programming starts! Functions, recursive relations, geometry, transforming algebraic expressions – these are all things you do routinely in math and these are all things you do routinely in competitive programming. Just as math helped me with programming, studying for programming also helped me do better at math, so these things are quite tightly coupled.
  • Should students prefer math over computer science for graduation?
    • ffao: There isn’t an objectively correct answer to this question – graduation choice should be influenced by the student’s tastes and what they intend to do with their life, so my best advice would be to research what graduates at each of these fields tend to do and go towards the one that has the choices that appeal to you the most. Getting into a programming job in general is easier with a computer science degree, but I have heard of jobs that hire mathematicians due to their usual analytical skills.
  • Can you relate your success in programming to your childhood?
    • ffao: Sure, I believe everyone’s experiences in their whole life matter - I’ve always liked math, so I didn’t have trouble with those parts. I also did a bit of programming, so I did not have to struggle with learning what ifs and whiles do since I already struggled with it before.
  • How can intermediate coders excel and reach the next target?
    • ffao: Just keep at it – do every competition you can, and you’ll struggle with a problem or two; those should be the problems a bit above your skill level so make sure you understand why you couldn’t solve the problem you couldn’t solve. Could you have approached the problem in a different way to get to the solution faster? Is there a technique you can generalize to solve a class of similar problems if they show up?

Other Questions that students requested:
  • How to understand hard and tough concepts easily for example FFT , centroid decomposition etc.
    • ffao: This sounds like the wrong question to ask. To be honest, FFT/centroid are not that useful and I didn’t learn about them for a very long time (I think I only knew about those things for a few months?) The best thing is to just go doing full competitions, without trying to learn specific techniques, until one of them comes up. But if you really want to know, my generic way to learn things when they do come up is: look up an explanation from someone who knows the subject well (there are a lot of bad tutorials, so you might have to search a lot to find a good one), try to do the most basic possible thing with the technique, then solve a few problems to see potential alternative ways to use it, then go back to solving random problems until it comes up naturally again.
  • How to select problems for practice? Ladders in A2OJ sort problems by tag and number of submissions which are not that great.
    • ffao: If you are training for a certain competition A, an obvious choice is to do previous editions of that competition for training. There are a lot of ICPC Regionals available online, also other competitions with quality problems like topcoder and codeforces. There isn’t a perfect answer to this and you’ll eventually find problems that are not helpful, the important thing is just to keep at it and eventually you’ll come across something interesting. I went to the Google Code Jam finals in 2014 and another finalist asked me how to find good problems, so I guess none of us really know. 😊
  • Tackling DP and understanding the states to be defined and how this though process goes inside his head so rapidly.!
    • What ffao said is exactly told in one of my videos to Introduction to Dynamic Programming that you can watch here.

Dynamic Programming: How to think of states?

If you liked the video, please hit the like button 👍, subscribe and share the videos among your college :D  

Have a good day! 😆


  1. Thank you for this wonderful article Rachit Sir.
    - Shivam

  2. This comment has been removed by the author.

  3. This was an amazing interview, thank you sir.
    How to contact you sir?

  4. This comment has been removed by a blog administrator.


Art of Time Management | Achieving Multiple Things in Life

rachit jain blog, Rachit Jain, rachit jain iit roorkee, rachit jain iitr, rachit iitr,rachit codechef, rachit hackerrank, rachit jain micr...