Блог пользователя Geothermal

Автор Geothermal, история, 16 месяцев назад, По-английски

Very loosely inspired by some comments on Thoughts on Reaching Cyan? and my recent AMA.

Until now, I've avoided telling beginners to practice math before working on competitive programing problems because I haven't figured out a helpful way of doing so. This post is my attempt at telling grays to train math first in a way that might lead to improvement without an absurd time commitment.

Introduction

This section is largely motivation for why I'm proposing this training plan. If you just want to see the instructions for the training plan I'm proposing, you can skip this part. The first subsection in particular is not especially relevant to the rest of the post, but I wanted to have some documentation explaining why I still think the traditional "just solve problems" advice is good.

The Conventional Advice on Improvement

I'm frequently asked for advice on how to improve at competitive programming. Typically, I tell people to focus on solving problems and learning from the ones they can't do, and I think this is the most common advice most strong competitive programmers give to beginners asking for tips. Below, I'll explain why I like to give this advice.

Looking back at my own experience, there were two main points in my career when I was totally stuck and felt like I wasn't improving at all. The first was when I had no background in algorithms at all, and I needed to learn e.g. what big-O notation is, what DP is, what it means to binary search for the answer, etc. Most of the people who ask me for advice know all of these things, so this isn't especially relevant to their situations (but if you don't know these things, read the first eight chapters of the Competitive Programmer's Handbook, and chapter four of Competitive Programming 4 if you have it).

The second was when as a high school junior, I couldn't solve USACO Platinum problems and convinced myself that segment trees, centroid decomposition, and heavy-light decomposition were really important algorithms that I needed to learn to do well on USACO, and thus I decided to spend a bunch of time repeatedly rereading articles about these topics in order to try to understand them better. I generally understood the concept of a segtree, but I wasn't able to implement them from scratch and also didn't have a great sense of how to apply them to problems, meaning that this knowledge was absolutely useless in USACO contests (indeed, that year I failed to solve several easy segtree problems). Meanwhile, centroid decomposition and HLD hardly come up, and even if they had, I didn't really come to understand them well enough to apply them to actual problems. I occasionally spent time thinking about Platinum problems, but they were mostly way too hard for me, so I found it hard to focus on them for extended periods of time or even to understand solutions when I saw them.

That experience is why I think the "just solve problems slightly above your level" advice is actually pretty good--I think I would have stood a fair chance at making USACO Camp as a high schooler if instead of trying to learn advanced topics and solve problems that were way too hard for me, I solved problems from the CF archive that were a bit above my current rating. This also would have fixed my segtree issues because I would eventually have encountered actual segtree problems in the wild that were closer to my skill level, and by solving them or understanding their solutions I would have eventually become strong enough to work on USACO Platinum problems.

Indeed, I improved a lot faster once I started following this advice. After tanking USACO as a junior and failing to make camp, I no longer had a good reason to focus on USACO (it's very hard to make camp for the first time as a senior, and it would have been too late for college admissions anyway, which in retrospect I cared about much more than I should have). I ended up shifting my focus to Codeforces contests; I switched from Java to C++ and started solving problems from the CF archive. Despite not doing any actual USACO practice that year, I did much better on the USACO (plus, I actually started to understand how to use segtrees), solving five problems during the season and getting very close to six, compared to just two the year before.

Motivating a Different Approach

I feel unqualified to give good advice to people who are hardstuck gray/green because I was never stuck in low Elo on Codeforces. This is partly because I had some programming contest experience before I started CF, but I was still a relative beginner when I signed up for CF, so I think the larger factor is that I had five years of math contest experience at the time. Many of the specific topics from math contests transferred well to CF, but more than that, the general thinking process was very similar, and many steps within Codeforces problems (e.g. when proving that your solution is correct) are essentially just math contest problems.

Thus, if I wanted to tell people to follow the same training plan I did, I would have to advise them to spend five years doing math contests first. This is obviously infeasible, so until now I've mostly given up on telling people to do math before trying competitive programming.

However, I've seen a large number of people, especially beginners, who at least appear to be following the conventional advice I outlined above but who don't see the same improvement I did. My theory is that the conventional advice may not work for some people because they haven't developed the background in mathematical thinking necessary to succeed in programming contests. Empirically, many of the top competitive programmers had extensive experience in math contests first, but this may be correlation and not causation. As a result, the goal of this post is to see if focused practice on math problems can help beginners improve at competitive programming more efficiently without the sort of time commitment I put into math contests.

There are (at least) two reasons I think training on math problems might be more efficient than directly training on programming contest tasks. First, programming contest editorials are often not great at motivating the mathematical thinking necessary to come up with solutions, meaning that it may be difficult for beginners who don't have practice thinking about hard math problems to reflect on how they could have solved problems themselves. Second, while most easy programming contest problems involve mathematical thinking, they are usually tagged "math", "combinatorics", "number theory", etc, making it difficult to isolate specific problem-solving strategies or to find patterns across problems. In contrast, the plan I'm proposing uses a tool designed to systematically build up various mathematical problem-solving strategies.


The Plan

In short, this plan calls for systematic practice on math contest problems involving no programming. I'll outline a specific roadmap below.

Instructions

For this training plan, we'll be using Alcumus. Alcumus is a completely free platform provided by Art of Problem Solving that allows you to pick a topic and receive problems from that topic targeted to your skill level. I suspect that practicing problems from e.g. Mathcounts, AMC 10/12, and AIME would give similar results, but the advantage of Alcumus is that we can focus on problems in topics relevant to competitive programming and e.g. ignore all geometry.

Start by registering for an Alcumus account. Go to your settings and set Problem Difficulty to Insanely Hard (you can tune this down later if the problems you receive are much too hard for you, but generally you want to be doing the harder problems on Alcumus) and Advance Only on Mastery to Yes. When you click play, you will be presented with a problem. You'll have two tries to answer it correctly. In the top-right, you can change your focus topic, the topic which most of your problems will be drawn from. Your focus topic will automatically change when you master it (once the progress bar in the top right becomes blue).

Once you're signed up for Alcumus, work through the following steps.

  1. Algebra: Set your focus topic to "All Topics in Algebra" and solve problems until you're mostly receiving Level 20+ algebra problems. If these problems feel much too easy for you, skip to the next step. Otherwise, master all topics in algebra up to "Advanced Quadratics". The easy topics will not take long to master (you should finish them in ~5 problems each). Algebra is less directly relevant to competitive programming problems, but it's fundamental to the problem-solving process and to the other fields of math we'll work on. If high-level problems in the early sections of algebra feel too difficult, master all topics in prealgebra first. Finish all topics up to "Factoring General Quadratics" before moving to the next steps. The remaining topics ("Sum and Product of Roots" through "Advanced Quadratics") can be done concurrently while working on the next steps.
  2. Counting and Probability: Master all topics in Counting and Probability. Combinatorics is the field of math that comes up most in competitive programming and is the most relevant to the style of thinking in programming contests, so this is where you should see the most improvement. Master topics through "Distinguishability" before starting the next step; the remaining topics can be done concurrently with the next step.
  3. Number Theory: Master all topics in Number Theory. These topics come up frequently in programming contests and are also valuable for building general numerical reasoning skills.

You can ignore all topics in Geometry, Intermediate Algebra, and Precalculus.

Finishing these steps should give you a reasonable baseline level of mathematical thinking skills (comparable to where I was when I started competitive programming). If you want to keep solving math problems, you can work on past problems from the AMC 10, AMC 12, and AIME. My advice is to start by working on algebra, combinatorics, and number theory problems numbered 1-5 on the AIME. Once you can solve these consistently, move on to combinatorics and number theory problems numbered 6-10, then work on combinatorics problems numbered 11-15. (It may be that AIME problems feel too difficult, in which case you should start with AMC 10/12 problems.)

You should continue to participate in programming contests and upsolve problems from those contests while working through this plan; it is designed to supplement and not replace programming contest training.

Time Commitment

The time commitment for this plan depends on your prior math background. I think most people should be able to master at least two topics per day in algebra and one per day in C&P/NT, with easier topics going faster. With about thirty topics per section, this should lead to a completion time of at most around two months. I'm not especially confident in this estimate, though, and you might work through it much faster or much slower than I did (which is totally fine). (However, if you e.g. complete the plan in under two weeks, it was probably too easy for you unless you spent many hours on it in that timeframe.)

Target Audience

I think this plan is most likely to help grays, and maybe greens. People above cyan probably already have enough mathematical reasoning skills that the problems on Alcumus will be too easy and thus won't benefit from this plan. I'm also not sure this will be useful if you've already completed a high-quality discrete math course, which would have taught many of the same concepts.

Obviously, this training plan will not teach you any programming. If you want to advance past gray, you should also know big-O notation, the basics of programming in your language of choice, and the STL data structures or their equivalent in your language. As mentioned previously, this plan is not a substitute for programming contest practice.

Additionally, I think this plan will be much more helpful in competitive programming than in job interviews because technical interview/LeetCode problems don't heavily emphasize mathematical problem-solving. I don't recommend this plan if your main goal is to prepare for technical interviews.

Some Thoughts on the Plan

I think this plan has several advantages as a way of practicing math for competitive programming:

  • It is completely free. Many of the other math resources I'd recommend (including the AoPS books) are not, and their costs may be prohibitive for some people.
  • It is very systematic. There are clear instructions and a specific set of benchmarks you need to achieve to finish the program.
  • Alcumus isolates specific math problem-solving skills. For those with limited math background, I think it can be very helpful to e.g. isolate casework, constructive counting, and complementary counting as separate counting strategies rather than just trying combinatorics problems in general.

My main concern about these instructions is that I'm not sure the Alcumus problems are difficult enough to be useful for this purpose. I've tried to compensate for this by suggesting a way of organizing practice on AIME problems, which I'm hoping will be useful for anyone who wants to continue working specifically on math problems.

I also am not confident that training on math problems will ultimately be more efficient for beginners than training directly on programming contest problems. To my knowledge, this theory has not been tested before, hence why I'm writing this blog :)

I've described the plan as "highly experimental" because I have very little sense of whether this plan is actually the best way for beginners to start their training. I think those who complete this plan will almost certainly experience some improvement, but I'm not sure whether this improvement will come faster than if they had instead spent an equivalent amount of time on programming contests. However, I think there's a small but nontrivial chance this plan will lead to significant improvements for a sizable population of beginning competitive programmers who are struggling to train by solving programming contest problems. I'm posting the plan here so that hopefully some people will try it out and we can see if it works for them.

If you try this training plan, please feel free to post updates on your progress below! Let me know if you have thoughts or suggestions, and I'll be eager to see whether you see improvement within a few months of finishing.

  • Проголосовать: нравится
  • +248
  • Проголосовать: не нравится

»
16 месяцев назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

Alcumus is very helpful. I learned some cool things from the number theory problems that help alot in CP. Also, it is good for practicing for AIME (my goal rn), and gamifies progression keeping you motivated.

  • »
    »
    16 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    How difficult would you say Alcumus is though? Compared to other problem sets if any?

    • »
      »
      »
      16 месяцев назад, # ^ |
      Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

      In subjects outside Prealgebra, Intermediate Algebra, Precalculus:

      levels 1 through 19 are early AMC

      20 through 24 are sometimes mid-AMC

      25 can range from mid-AMC to mid-AIME

»
16 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Do you have any recommendations for harder combinatorics/number theory problem sources for someone who can spend a lot of time but doesn't really have much prerequisite knowledge?

  • »
    »
    16 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    The only short-answer contest I can think of with harder problems than AIME (which I discussed above) is HMMT February. Otherwise, your best bet is Olympiad problems, though if you can attempt many of those you definitely have strong enough mathematical thinking skills to do well in competitive programming.

    • »
      »
      »
      16 месяцев назад, # ^ |
        Проголосовать: нравится +13 Проголосовать: не нравится

      PUMaC and CMIMC also have hard combinatorics questions (similar to the level of HMMT) that have a competitive programming flavor. For olympiad combinatorics questions/resources, I suggest reading the relevant chapters of OTIS Excerpts by Evan Chen. If you're interested in more olympiad combinatorics questions, feel free to message me and I can give some of my favorites :)

»
16 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

As Alcumus is for practising maths, can you please tell me about the resources for learning math topics you've mentioned? and how to use these resources?

  • »
    »
    16 месяцев назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    My hope with this plan is that reading the solutions to problems you can't solve on Alcumus will be sufficient to learn topics you aren't familiar with. Because Alcumus gives you a focus topic to work from, you'll see several problems with similar ideas in a row, allowing you to immediately apply what you've learned to new problems.

    If you're looking for something more formal, I used the AoPS books. The Alcumus topics listed above cover Introduction to Algebra, Introduction to Counting and Probability, and Introduction to Number Theory, though Intermediate Counting and Probability is also very helpful for programming contests. Alternatively, the Art of Problem Solving: Volumes 1 and 2 cover all areas of contest math (though in a bit less depth); one option would be to read those, skipping the sections on geometry.

    The downside is that these resources aren't free. If anyone knows of free/cheaper resources for learning discrete math, please share them below--I'd find it very helpful to have more free high-quality math resources I can recommend.

»
16 месяцев назад, # |
  Проголосовать: нравится +28 Проголосовать: не нравится

Can you give me some hints as for how to learn MO problems while being an old GM? I think that I might enjoy CP more after doing that...

  • »
    »
    16 месяцев назад, # ^ |
      Проголосовать: нравится +29 Проголосовать: не нравится

    Hmm, I may crowdsource advice from people who were more successful in Olympiads than I was--I didn't get very into Olympiad-level math in high school and thus don't have much better advice than the traditional "just solve problems lol" suggestions. This link has advice from Evan Chen, who's a very successful MO coach in the US. Some of it is probably a bit basic since I think you already know e.g. how to write proofs, but it links to other pages on his site that may be useful. If you're looking for problem ratings, this page has very rough estimates of the difficulties of various Olympiads.

»
16 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Is it okay to look at the failed, WA, TL tests to improve your solution while solving tasks from the CF archive? Will it be beneficial in contest where I can not see the failed test?

  • »
    »
    16 месяцев назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Try to debug on your own first, but looking at tests is fine if you can't find the error after debugging by hand. That said, you should rarely need to do this if you learn how to stress test; in most cases stress testing is the easiest way to find a test case that breaks your solution. (In fact, stress testing is often even more useful than looking at test cases on CF because the CF tests are often too long to view or to analyze by hand.)

»
16 месяцев назад, # |
  Проголосовать: нравится -63 Проголосовать: не нравится

If you're a beginner, just give up.

»
16 месяцев назад, # |
  Проголосовать: нравится +24 Проголосовать: не нравится

i'll try

»
16 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I agree with the rest of the blog but I feel that asking beginners to solve AIME 11-15 is like telling someone to become pro at tennis to get better at pickle ball lol

  • »
    »
    16 месяцев назад, # ^ |
      Проголосовать: нравится +10 Проголосовать: не нравится

    The AIME recommendations are optional; I've provided them for anyone who wants to do more math after finishing the plan or who found that the Alcumus problems weren't hard enough to be useful. That said, a lot of late AIME combo is actually just DP by hand or otherwise somehow related to programming contest topics, so I found that the skills actually transferred quite well to competitive programming.

»
16 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I will try this for a month and try to give updates. We’ll see how far I can go. Current rating August 1: 1343.

  • »
    »
    5 недель назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Yoooo, you are 1600 now. Did it help? Was this a major part of your success?

»
16 месяцев назад, # |
Rev. 24   Проголосовать: нравится +18 Проголосовать: не нравится

I'll leave a log here of my improvements so we can test this!

I have only a bit of prior competitive programming experience, and my perf right now is hovering around the pupil, and as someone with exactly zero competitive math experience, I think I'm the perfect test subject.

I'll leave a short description of what math I solve here, obviously, my programming will be on my profile or CSES and I will compile them later

8/1/23 Alcumus first 7 topics on algebra done, says I am level 5, not sure how to change that... my math is a lot worse than I initially thought

8/2/23 Another 3 completed, I'm on "Solving Two-Variable Systems" now. I don't expect to see any contest improvements yet, so far solving 1300s feels more helpful

8/3/23 I just discovered the "all topics" section at the bottom of the topics in algebra which is what geothermal was talking about...

8/4/23 I'm not gonna lie, systems of two equations were especially crafty for me. I solved through "Two Variable Word Problems" which is module 12. So I am barely on pace with Geothermal's time commitment schedule. School started for me so it will be a little harder to keep this up, but I'm determined. Excited for negative delta tomorrow morning

8/5/23 nothing but bricking the div2

8/6/23 bruh school sucks so much I don't have time for anything, at least did some cf

8/9/23 I have been working through "Advanced Systems of Equations" but with my 1 hour a day time commitment I'm not getting far. I have a lot of issues with certain procedures, and sometimes I only figure it out after 2 days of 20 minutes of work on a single problem. I'm working on multiple units at once since "Advanced Systems of Equations" is taking so long. I'm noticing that I don't trust the mathematical systems of equations I set up sometimes, which is really interesting to me, and something I will look for more clues as to why this problem exists, and also look to fix the problem. I've made progress on units 13-15. Thanks to Madboly for reminding me to come back to this. In the end, the amount of work I put in is the amount of reward I will get out of this, and I just need to put in the work.

8/10/23 Completed the units: "Ratios", "Unit Conversions", and "Percents", so I'm on unit 17 right now, and I am still working through "Advanced Systems of Equations". So far, I still don't really trust the systems of equations I am setting up, since sometimes they are wrong, but the number of times I set up an incorrect equation is getting lower. Also, sheer arithmetic errors have also dropped a lot.

8/11/23 I'm back in the rhythm for now, found an equilibrium between school and cf. Completed "Distance in Plane", "Inverse Proportion", and "Direct Proportion". I struggled a bit with Ratios, so I skipped it for later after working on it for ~15min. I now have two skipped modules, "Advanced Systems of Equations", and "Rate Problems" that I start with everyday, then move on to the daily 3 units. I'm on unit 21 now. I think Alcumus is giving me harder problems now as well, which is nice. I also solved 1840B "Binary Cafe" after previously struggling to think through the corner cases. I would attribute this win to the math, which helped me through some parts. One important thing I have noticed, is sometimes a particular concept/observation seems too hard to think about/prove, so either I assume it's true/false, or I abandon it altogether. This leads to some problems being especially difficult, whether it's due to corner cases or off by ones that are hard to detect (ex in an if statement, or in a power/adding to a variable before multiplying). I think by building a better math foundation, you build intuition and comfort with the tools and concepts the problem is working on so that you can pursue these more complex intuitions, and validate them. If true, this would explain why math contest participants converge on specialist really quickly, since they have the tools to be comfortable, and not get tripped up, when trying to validate their intuitions. That in turn would allow them to solve the either more difficult, observation based, or simple DP based Div2 B/C and maybe even D.

8/12/23 This morning's contest felt better than usual, and I felt confident I solved B. I bricked A, solving it in 20min instead of my usual 7 because I made the right observation and then implemented a really complicated way. B I also was able to just work through. Hopefully, I can get faster because I feel like both should have been able to do in 10min each. back to the 1100 rating range at least. My browser's time-tracker extension says I spent 2 hours on AoPS today so I'll just call it here for today. I only got through "Graphing Multiple Lines" and I am almost done with "Factoring Monic Equations". I also attempted all the modules in between. Now that I mention this browser time-tracker, it says I spend about an hour every day, sometimes up to 1.5 hrs, on AoPS alone so my time commitment estimate of 1 hour a day is pretty accurate, considering I also solve 1 CF 1100/1300 a day.

8/13/23 "Factoring Monics"

8/14/23 "Multiplying Binomials"

8/15/24 "Midpoint of a Segment"

8/16/23 "Factoring General Quadrics"

8/20/23 I was falling behind on codeforces solves, so I just spammed like 10 800s. Sometimes I can't solve a 1300 and I just spend multiple days on it, pushing everything else aside. I haven't solved any new modules in AoPS, but I have made progress on multiple different modules.

8/29/23 BOYS WE ARE BACK IN BUISNESS "Factoring General Quadratics"

  • »
    »
    16 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Any updates?

    • »
      »
      »
      16 месяцев назад, # ^ |
      Rev. 3   Проголосовать: нравится +5 Проголосовать: не нравится

      It's kind of embarrassing to even talk about how slow I'm going rn... so I kind of avoided posting here. Thanks for giving me a reason to continue, I suppose any feedback at all will be important for future people attempting this, even if it's not perfect data in that Im not completing things in the same schedule Geothermal suggested

  • »
    »
    16 месяцев назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Thanks for sharing your progress! Fwiw, I think the fact that it's gotten challenging fairly quickly is good evidence that the plan is working. I think the skills covered in the plan are very foundational in building the mathematical thinking necessary to do well in programming contests, so if you're struggling to solve the problems on Alcumus, that suggests that (a) you do stand to improve at competitive programming by working on your mathematical thinking and (b) working through Alcumus problems will improve your mathematical thinking skills. I agree that it will take a while to see results in actual Codeforces contests (which is why even if this plan turns out to be highly effective, I don't think many people will ever do it). However, I think in the long term this may be more effective than just trying to pick up tricks from e.g. past D2A/B editorials because learning math builds the skills necessary to continue improving at a higher level.

    I have relatively low confidence in the timeline I described, so don't worry if the plan is taking you longer than I originally suggested. As long as you consistently put time in at least 3-4 days a week, you should see results eventually (though obviously practicing even more consistently than that is ideal).

»
16 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

In the previous blog you mentioned that past USACO constest (2015 to 2017) are good for learning how to use classical algorithms. After what codeforces level would you say it makes sense to look at those? In this post you mentioned that before getting better at codeforces you struggled with the USACO problems.

  • »
    »
    16 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Doing USACO is neither necessary nor sufficient to do well at Codeforces, but the 2015-17 problems may be helpful if you want to focus specifically on learning standard algorithms. There's no minimum Codeforces rating--just start with the Bronze problems and move your way up (i.e. once you can consistently solve Bronze problems, move to Silver, and so on).

»
16 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Is it just me or is there no option for selecting all topics in algebra? I see options for all topics in C&P/NT, but not for algebra.

»
15 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Hi Geothermal, I've been following your Alcumus math plan consistently for about a month. I've made significant progress and have almost completed the algebra pathway. I have been setting my focus as "All Topics" to try and develop my ability to figure out what type of problem it is. I have two questions for you. Should I do the same strategy of random problems for Counting and Probability and Number Theory? This strategy probably makes me decently slower because I sometimes don't know how to approach a problem but personally I feel like it is beneficial for the long run. Would it possible for me to improve at codeforces without doing much codeforces (just Alcumus)? I can't do many codeforces contests because most start during school in my time zone. Personally, I am inclined to believe the answer is yes. Most grand masters I have seen have pretty much started at expert and then quickly climbed their way up. I am hoping that it is the mathematical problem solving that makes the difference. What do you think?

  • »
    »
    15 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    If you have a baseline understanding of the topics covered in the C&P/NT sections, using all topics is fine, but if you're learning these ideas for the first time then I think a significant part of the value of Alcumus comes from being able to drill specific topics until you have a good general understanding of how to approach them. One way to combine these approaches would be to go topic by topic until you've passed all topics (i.e., made the progress bars green), then switch to all topics until every topic has been mastered (i.e., the bar becomes blue).

    Would it possible for me to improve at codeforces without doing much codeforces (just Alcumus)?

    I can't say anything with certainty because aside from the comments in this blog, I haven't seen any documentation of what happens when people train with math contest problems specifically to get better at programming competitions. My guess is that you'd improve some, but (a) you might improve more slowly than if you integrated programming contest practice and (b) your rate of improvement would significantly decrease past around the mid-1000s, since at that point programming contests will begin to present more non-mathematical types of problems. The other reason to integrate CF practice is that most CF problems are not directly solved by the techniques you learn in Alcumus--rather, practice on Alcumus makes you better at recognizing and understanding the patterns that come up in solutions to competitive programming problems. Thus, in order to fully benefit from your Alcumus practice, you'll need to also practice some competitive programming problems. (Even if most contests conflict with school, you can practice by solving the problems later on.)

»
15 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Advice to start solving AIME problems is a bit extreme. I only scored 4 on the AIME. It's definitely not necessary if the goal is "get to cyan" (although I get the feeling that it's necessary if you want to be red).

»
11 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

can i follow it for a year without doing problems here than back to CP ?

  • »
    »
    11 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    he has a comment answering that , but long story short , it would be better if you integrate cp to your practice

    • »
      »
      »
      11 месяцев назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      ok thnx, btw, how much math is needed for CM ?

      • »
        »
        »
        »
        11 месяцев назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Some understanding on combinatorics and number theory is sufficient ig but math is definitely not the hard part at improving when you are <= GM , I think improving problem solving in general and being able to come up with novel approaches is more important (and thats what I am currently struggling to improve)

  • »
    »
    11 месяцев назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    I don't have a strong sense of how well this would work--many strong competitive programmers did spend time doing math contests before starting competitive programming, but there's no way to know if they would have progressed faster by starting competitive programming earlier. My intuition is that it makes sense to integrate programming problems into your training early and to work on competitive programming while simultaneously training your math skills.

»
11 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Thank you

»
11 месяцев назад, # |
Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

I don't know if I am qualified to call myself a high rated programmer or not. But I have never done any math contests. I barely did the minimum practice needed to prepare for exams in high school and never had particularly impressive score at maths. In fact, I had participated in zero extra-curricular activities before university.

However, one thing I did, when I did practice, was that I used to spent hours upon hours on a single problem. I rarely used to rely on textbook/guides. That habit of mine got carried into competitive programming, and that helped a lot.

Here is my take, problem solving is like an art. Following a rigid structural method is not really a good or reliable way to become a good artist. Art requires creativity. Likewise, problem solving requires creativity.

Therefore, to be a good competitive programmer, along with some conventional approaches, I suggest one should try-

1)Instead of focusing on rating too much, enjoy the process of problem solving itself. Enjoy the journey, not the destination.

2)Unbound one's creativity. I never used to limit my thinking, I used to try out ideas no matter how ridiculous they seemed to sound like, even if they seemed unfeasible at first. In fact, many of the solutions I figured out came from ideas which at least, in the beginning seemed unfeasible.

  • »
    »
    11 месяцев назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Well, your case seems exceptional. The fact that you didn't do really good at math in school doesn't mean you don't have good basic mathematical/logical reasoning or sort. There is likely no way grey can progress to become purple or even blue without having a good understanding of how to make sure (sketchy proof) that their ideas and observations should work. Otherwise you need to be goddamn lucky to hit 2-3 problems a contest consistently and fast enough. This only comes if you drilled "basic" math or maybe like to solve any sort of puzzles before. I doubt that if you have a really good memory (even eidetic one) this will help you to solve problems well enough to progress to, say, to purple. The thing that I found is that the reality for grey seem to be even worse. Even the suggestions to solve algebra may be complicated for grey/green. This means that I had to pick pre-algebra first to get a good grasp again and only then to move on to solve algebra.

  • »
    »
    10 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    thanks boss for this comment

»
11 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Covering all needed math in a Stream is a pretty good idea

»
11 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Is it unadvisable to do topic wise and not All topics at once. For eg going topic wise through algebra instead of all algebra.

  • »
    »
    8 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    I recommend going topic by topic (i.e. doing each topic in algebra individually rather than "all algebra"), since when you're just picking up these fundamental skills it can be helpful to do several related problems in a row. You might consider then doing some problems from "all algebra" at the end in order to practice applying techniques without knowing which method in particular will be useful.

    (Sorry for the late response! Posting now in case the answer is useful to others.)

»
10 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

What should we do if we don't know the answer for some alcumus problem? Should we just keep trying until we figure it out or just fail on purpose so you can get the solution? I'm thinking about reading some hints but, unlike codeforces, there's no editorial of some sort for each problems that I can, say, read the first line of and treat it as a hint (as far as I know). Also how do you kind of "upsolve" the problem you failed to answer?

  • »
    »
    8 месяцев назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    I recommend spending a reasonable amount of time on each problem (depending on the problem, I'd spend at least 5-20 minutes, going on the lower end only if the problem obviously requires some technique you haven't learned), but it's fine to give up if you can't figure out the answer. Part of the goal of using Alcumus is to expose you to techniques you haven't seen yet, and it's more productive to learn those techniques from the solutions than to continue bashing your head against a problem you have no idea how to solve. Alcumus doesn't provide an upsolving feature, but if you go topic by topic, when you get a problem wrong you will normally see some similar problems next.

    (Sorry for the late response! Posting now in case the answer is useful to others.)

»
8 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Okay, I'll try this method out and report back on it in about 2 months. I currently have about a 30% AC rate on 1300 ELO number theory problems. We will see how this changes when I finish this training.

»
6 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Got it!

»
6 месяцев назад, # |
Rev. 2   Проголосовать: нравится -13 Проголосовать: не нравится

With all due respect, this training plan most likely works worse than simply grinding CF problems. Why? Because math problems and CF problems, in many cases, aren't really that conceptually similar. The one thing that they have in common is that they both require problem-solving abilities. I guess that your training strategy is based on the assumption that you can improve your problem-solving abilities by doing math problems. You aren't actually gonna get better at problem-solving by solving a bunch of math problems, and the transfer to CF is definitely less than if you had been grinding CF problems.

inb4 "blue telling LGM which training style works best" — All I am saying is that the belief that one can improve their general problem-solving ability isn't correct, so this whole training strategy is wrong too.

  • »
    »
    6 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    TBH the optimal way to get good at CF is not so hard to come up with.

    JUST GRIND CF CONTESTS !!

  • »
    »
    6 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    a HiGhLy eXpEriMeTtAl

  • »
    »
    6 месяцев назад, # ^ |
      Проголосовать: нравится +37 Проголосовать: не нравится

    Great points! To summarize:

    The anecdotal evidence in favor of this approach is a lot of top performers with a strong math background. (A lot of whom have suggested that Div 2. A-D are increasingly math olympiad style problems.)

    And the anecdotal evidence in favor of your suggestion that "the belief that one can improve their general problem-solving ability isn't correct, so this whole training strategy is wrong too" is a plateauing blue who spends spends all his time talking about how he's stuck because his IQ is too low.

    • »
      »
      »
      6 месяцев назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится

      The evidence in favor of my suggestion is that IQ largely can't be improved. If you are struggling with these problems, even after having practiced a lot, your problem likely isn't a lack of practice / an incorrect training strategy.

      • »
        »
        »
        »
        6 месяцев назад, # ^ |
          Проголосовать: нравится +18 Проголосовать: не нравится

        That's...not a logical argument?

        In every activity that there are people who have been doing it for a long time but haven't improved a lot. I know chess players who have been playing for 20+ years but haven't crossed 1600, guys who played basketball for hours almost every day but didn't get good enough to start for the high school team, people who run every day but can't run an 8 minute mile... story goes on.

        Is that all because of their IQ? In my experience, no. It's because they never got good enough at tactics or they spent all their time dribbling between their legs and doing crossovers without moving their feet, or they just didn't push themselves.

        In short, it's difficult work to improve at...pretty much anything, and it's very easy to avoid doing that work.

        Either that, or there is "Codeforces IQ" and "chess IQ" and "basketball IQ" and "running IQ" which stops people from getting good. And also "guitar IQ" and "dieting IQ" etc.

        • »
          »
          »
          »
          »
          6 месяцев назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          To be fair, "basketball IQ" is pretty much height. It's just unrealistic to expect a 5'8" guy to be successful at basketball. Of course, there are always exceptions.

          I think that what you're referring to here when you say "codeforces IQ" "chess IQ" etc. is talent. It is no secret that talent plays a role in every sport / skill. If that weren't the case, then everyone could be like Magnus Carlsen, tourist, or Michael Jordan.

          • »
            »
            »
            »
            »
            »
            6 месяцев назад, # ^ |
              Проголосовать: нравится +13 Проголосовать: не нравится

            You need to get out and do other things man.

            Yes, height matters in basketball, but 1) some of the people I'm talking about were 6'2, 6'3, and they weren't trying to make the NBA, just a (very competitive) high school team. For what it's worth, the guards were 5'9.

            And I didn't say anything about tourist or MJ. Most people probably can get their weight below 200 pounds, run a 7 minute mile, etc. but many people struggle with it. That's the equivalent of your situation.

            But it seems that you've been committing to the belief that IQ is stopping you for months, so maybe fix that first.

            • »
              »
              »
              »
              »
              »
              »
              6 месяцев назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              You need to get out and do other things man.

              Why? Am I harming anyone with my comments?

              • »
                »
                »
                »
                »
                »
                »
                »
                6 месяцев назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится

                No, but you seem to have the life experience of a choronically online dude who spends all day with the computer.

                If you fixed that maybe you'd understand what I'm saying

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  6 месяцев назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится

                  Well you are certainly free to think that way. Anyway, I will not stop making comments.

        • »
          »
          »
          »
          »
          6 месяцев назад, # ^ |
            Проголосовать: нравится +5 Проголосовать: не нравится

          I think you are generally right in that for most activities, the vas majority of people plateauing is because of them not practicing properly. Like if you look at this post, you’ll find many people (including me) that were going to try this out that stopped half way through.

          But there is also a true ceiling that does exist for many activities. It’s the reason why you can’t find a single person that started playing chess as an adult that’s now a GM.

          I think that you should always train like you’re far from your ceiling, because it’s impossible to know and if you think you are at your peak you’re definitely not going to improve.

»
6 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

At first, I found this guy on Youtube. Didn't know that he was a Legendary grandmaster. I was not good enough for fast coding, but now I have started following his coding style and thought process, it's helping me a lot. Thanks Jay Leeds.

  • »
    »
    5 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    With due respect how do you learn from him when he solves proble of such a high difficulty. I always had that issue with others I tried to follow. Can you give me some tips.

»
5 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Is there a list like learn these topics, solve this problem (for using the concept so it sticks, most of the time I forget things cause I don't use the algo). I have been scatteredly at this for like a year don't feel like I'm improving much.I am finally taking it seriously as I'm a 3rd year, is there a full plan for this.Would appreciate a reply very much thanks.

  • »
    »
    5 месяцев назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    Yes there is.Here follow this. BTW I am still learning to make myself better. You can also follow some other dudes like him. Just try to solve those problems he solved at his early stages. Just try to solve more vivid problems. And also try to solve in other OJ's problems.