I have heard that being experienced in olympiad math competitions makes one more likely to succeed at coding competitions.
# | User | Rating |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
# | User | Contrib. |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 155 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | djm03178 | 152 |
I have heard that being experienced in olympiad math competitions makes one more likely to succeed at coding competitions.
Name |
---|
Why not focus on the real thing instead?
Benq already had an extensive math background by the time he started doing coding competitions, and Luke Robitaille made USACO Platinum quite easily after many years of math contest preparation. From this, I assume that having lots of experience with math competitions does help tremendously with coding competitions and that having little to no experience with math contests would give you a more difficult time with coding competitions. Do you not agree with this?
Your question, in the title, is incredibly broad. Nobody can give you an answer to your real question, and the question you posed is meaningless — you'd be better off solving questions than asking loaded questions.
Most of (good) coding competitions like codeforces and atcoder is learning how to apply concepts that you learned to problems you haven't seen before. In that regard, you can improve through solving math problems, but IMO it's better to just do coding.
The example you give sounds like typical Survivorship Bias.
At the lower levels, you're mainly bottlenecked by problem solving skills, not knowledge. I've seen math people with good problem solving skills reach IM without knowing what a segment tree is.
So the question is whether you can become a better problem solver by practicing math or coding. I would actually say math is the more efficient way. In both cases you wouldn't get better just reading books (which is mostly good for building knowledge).
Improving your maths skills by 100x might help improve your coding by 10x
But improving your coding skills by 10x will certainly improve your coding by, you know, 10x
this is true, however it is important to note that there is a state of diminishing returns in any single day of how much time you spend on a single activity.
For example, I play piano, and training for pieces for my entire scheduled practice doesn't make sense — there is skill work involved known as scales and arpeggios. These skills translate over when I need to play a classical piece — while yes, I could just practice the notes for the given measures, practicing skills overall will translate for my future pieces as well.
Therefore, spending time on mathematics, if you enjoy it, will be helpful, and your brain will thank you for giving it a break from cp all day long.
are you decent enough at solving math olympiad problems? If not, on what basis did you come this conclusion?
A general knowledge of number theory and counting problems is required... and also the occasional geometry that might require trigonometry. And well, graph theory (but here in Romania we don't actually do graph theory as part of math, at least in high school). So it's not all the math that would be for the mathematics Olympiad. And there might very well be things that are mathematical but won't show themselves in math Olympiads, such as a trick for calculating the nth term of let's say fibonacci in logarithmic time (at least, the people I know who go to such Olympiads have never heard of such thing, but I did frequently see this in Romanian Informatics Olympiad and was able to understand it, despite never having gone to a math Olympiad myself). On top of that, I personally doubt you really need to know mathematics as rigorously for coding as you do for mathematics Olympiad. At least to a certain level I think for quite some countries the requirements for computer programming are taught in high school. The general logical thinking in maths might be fully transmissible to computer programming, but why bother when you can learn it from computer programming? Maybe to become grandmaster you do need better maths... but I personally don't know that.
As someone that got to IGM without going through a single book (for the sake of getting better in CP/competitive problem solving), no it's not needed.
If you want to learn number theory, solve hard number theory problems. If you want to learn combinatorics, solve hard combinatorics problems. That's it.
One important part that some people don't seem to understand is that when practicing, solving != AC'ing. You can guess solutions and AC but if you have no idea why it works then you're mostly just wasting time.
Hi, I wanted to ask someone experienced. What thoughts do you have on this comment? Will it be helpful to learn these heuristics from the mentioned book?
It would be helpful for sure, but probably not needed. You'll encounter problems that use those ideas eventually (given some practice) and if you try to go beyond what you "can solve" and try to really understand why things work instead of giving up on hard problems then you can naturally learn those things. If one actually goes with that approach of reading books, keep in mind that the most important part is being able to use those ideas in practice, so don't expect to instantly get better just by reading a book because most likely it would still take some time to get used to it (by solving problems).
Thanks a lot. I was practicing problems on codeforces but was having second thoughts if I should go for the book. Now, I can just focus on one thing.
Do you mean a "math olympiad book"? Or are you saying that you have never read any book in your life before becoming IGM?
And in a general sense, a book is just a piece of text written by someone. Humans tend to learn a lot by reading the things written by the other people, even if these other people died centuries ago. This way it's not necessary to reinvent all the knowledge accumulated by the humankind.
I hadn't gone through (note the difference of nuance between go through and read a bit) any math book other than normal math books that are used until high school. To be completely fair I was already some time into university but still, the only "math" thing that I'd count is studying for exams in the classes that had automata theory, basic logic and stuff like that.
Btw, I probably learned more basic logic in minecraft than in the university lol
I see, so a part of your recipe for competitive programming success is to play minecraft instead of studying at an university. And of course avoid going through math books too ;-)
Don't know about the others, but when I was studying at an university myself (admittedly physics instead of computer science), the first year was full of pretty intensive math. Definitely a big step up from high school. Preparing for exams required "going through math books", because a broad range of possible topics could show up in an exam question. Of course, one could mix and match different books, lecture printouts and internet articles for effectively the same result. And then make a claim about never going through all chapters of any particular math book, but this would be a little bit dishonest.
Well, your experience was obviously different from mine, as studying for exams for me was mostly solving past exams then studying the specific parts that I don't understand.
The minecraft thing is because I mostly played around with redstone so I learned basic boolean logic, truth table, mux/demux, de morgan's law, nor/nand sufficiency, ALU stuff and other things from online tutorials when I was fooling around in high school. Other than that, you basically need to know the basic ways of proving things and that can be probably learned in the same way, by seeing some dirty explanation (for example some video) and some proofs being applied in problems. I also know that I understood the things that I learned from minecraft way more deeply than methods of proof, at least until I started using them in practice for CP problems :D
I never claimed that it's not useful, I claimed that it's not needed. I do claim that selectivelly learning what you need for actual problems during your CP journey is more effective though. I was fine with failing in problems then asking people "how to prove/solve this problem?" or googling stuff, that helped me A LOT MORE than any book.
Btw, I did go through a geometry book but that was after reaching IGM and it has helped me in maybe 5 problems since I read it so in the big picture not that effective.
TLDR: there's this really good quote "In theory, theory and practice are the same. In practice, they are not." that is in my opinion quite true in CP. The best way is probably a mix of both but practice is still the most important part by a huge part.
One important part that some people don't seem to understand is that when practicing, solving != AC'ing. You can guess solutions and AC but if you have no idea why it works then you're mostly just wasting time.--tfg
instead of olympiad math books you could try a "coding book" called CLRS or "Introduction to Algorithms" that is really a math book.
Bruh no
Learn how to talk without saying "bruh."
Hi don't mind me im just a cloud
You seem to have plateaued at 2600 rating.
No sir, I only 2600 cuz cheating
Bruh.