Hi everyone, i have a question that i hope it's not too dumb or obvious. What is more important for competitions in general: learning algorithms and how to apply that algorithm in solving problems or solving random problems that require more constructive oriented or ad-hoc / observation thinking ( I know there are different styles of competitions but let's say in general). Of course you won't be able to solve a problem if the solution is an alternation of an algorithm that you don't know, but what I noticed is that till a pretty high skill (grandmaster), it suffices to know the same things as a candidate master or master. This question may sound lazy but I am curious to see what people think. Thank you very much and have a nice weekend!
The second is more important. You can always learn the first quite quickly if you have a will.
Your comments are very helpful these days..
Nice idea, but will the first one make you smarter for the second? Will it actually help you make more complex observations for the problems that actually don't require tough topics?
Of course, it is useful to learn some algorithms once in a while. I'm just saying that knowing many algorithms without practice will not let you win any contest, unfortunately.
Most of the schools mostly teach algorithms, because it is very difficult to teach a person how to solve problems. It only comes with practice or even from birth. But seriously speaking, I think the main goal of such courses is just to give you a feeling of moving forward, so you gain motivation to rush into practice to see if you can apply the new algorithm.
I would say that most of the problems don't contain any algorithm at all, they just mostly contain small ideas that you can find only after seeing hundreds of them.
I think the most important thing is really your environment. I only moved forward in CP when I was surrounded by other people who talk about it, share ideas they heard somewhere, compete against each other, etc. Otherwise you just risk to lose all motivation.
That is what I think.
You can always learn the first quite quickly if you have a will.
And forget them quickly if you have a will. XD
What is more important for speaking English: learning words or how to use them together in a sentence?
both are necessary
Ahah, well yeah, but when i am talking about "words" i mean flow, complicated string data structures, words that will make you sound smart but not sure if you will actually become smart. Big fan of your hardcore streams!
why not just try some more (harder) problems and see for yourself?
Well when i am training i solve only problems 2400+, because even if i don't solve it by myself i understand the tutorial in decent time, and i almost never see something really advanced, just more advanced thinking. That's why i am asking, because i am not sure why so little growth. But i enjoy doing those kinds of problems, again i just asked out of curiosity what people think.
Hm makes sense.
My current interpretation of why this happens has to do with how people set problems. First, you have to realize that the people who make problems are just like you and me. They wouldn't know that many advanced algorithms, and even if they know really advanced algorithms, it wouldn't be great to put them on contests, because 1) it gives an advantage to people who happen to have seen that algorithm, and 2) it likely means that you have to spend a lot of time just implementing the algorithms part, which isn't great for relatively short contests, 3) the fun part is more the adhoc aspect instead of "who can memorize this algorithm and use it on a direct application" which already tends to be the case sometimes when the problem involves relatively advanced algorithm.
So if you think about the three ways that people set problems, it's like 1) start from some natural question from life, 2) reverse from some given idea, 3) tweak some other problems, then everything makes sense. If it's 1), then by prev paragraph they need to solve that problem, but they would basically use the same "tool kit" that you should know to solve the problem (well, or they just continue to simplify the original problem until it does); if it's 2) then again the idea shouldn't be something you are too unfamiliar with if you have practiced enough, 3) similar as 2).
So basically the hardest part of the hard problems is probably the ability to reduce the given problem into something that can be computable. And for the very last part, the problemsetters try to make it so it's not too obscure so that's why there's nothing advanced. Not saying advanced things might not occur, just it's less fun & I think people would complain, and who knows? if some advanced thing becomes mainstream then it probably wouldn't really count as "advanced" if you study it enough.
Yes, flow is important when speaking English. Broken sentence fragments are hard to understand.
I get your words, but for some objections: Advanced algorithms are not words because you can reinvent them. Indeed you do learn advanced algorithms because you want to invent something like that. I would say it’s more like reading seminal poems or proses.
The one that works as “words” are formal logics, math, programming language, etc.
the most important thing is your brain!
So, I should've been using that this whole time?!?!
Nah thats just extra XD
"PRACTICE"
In the context of Competitive Programming, my experience is that algo tend to be important in minor contest while problem solving skills reigns in majors, mostly due to quality of setters. In minor contests you have lazy setters rebranding well known results or flexing at you with their knowledge in an obscure algorithm / research frontier result (NB 1), and bingeing in OJ past problems could boost your performance; Whereas majors usually has setters with a genuine interest in sharing their wicked thoughts, that you have to be adaptable to perform well.
I think that is why you could hit GM with only a CM level of algo tool set, given that you win the problem setter lottery.
I got this observation from the ICPC East Asia Continent region — Teams relative rankings tend to fluctuate a lot depending on the problem setting team. We have teams that goes neck and neck w/ power houses like THU/PKU/CUHK in ICPC regionals / EC Finals, then crumbles when they faces novel problem sets such as CCPC Finals 2019. It might be just variance, but I think it’s no coincidence that every year’s CCPC F / ICPC WF ends in the same way.
NB: I legit got screwed by a regional that asked for O(1) (generic-) online rank queries. The setter had a great time flexing at us O(lg n) mortals.
What will be the answer for this same question but as a newbie or pupil?
You want to be able to solve A-B div2 constantly, so you have to practice with lots of A-C or 1300-1500 problems to gain intuition as mush as possible. There are almost no algo's, just new tricks and ideas that come with experience.
Knowing and studying algorithms is useless without thinking. For example, where do you find a problem that just says "implement Dijkstra's algorithm" or "find the LCA of 2 nodes in a tree"? In order to solve problems, it is necessary to a) be able to make observations, and b) be able to modify algorithms.