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.

**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.**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.**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.

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.

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

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

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?

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.

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 :)

yes I'm interested in combinatorics. Can you suggest more?

Also interested in more combinatorics

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?

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.

You're awesome

http://libgen.is/ if you want to get AoPS books for free, (I believe it has some of them), although you may also incur some guilt for pirating

khanacademy.org is good for math as well, although it doesn't cover discrete math.

Libretexts also has lots of (Legal) free text books: https://math.libretexts.org/Bookshelves/Combinatorics_and_Discrete_Mathematics

Thanks a lot

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...

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.

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?

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.)

If you're a beginner, just give up.

The first person to compare women to flowers is a genius, the second is mediocre, and the third is a fool.

And the fourth is a sexist.

i'll try

can we try together

shut up simp

ill also give it a shot yo

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

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.

I think this is the only blog that I need and all people who always asking how to develop maths and achieving a good ratings.

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.

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"

Any updates?

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

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).

Got it!

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.

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).

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.

I can see an option for all topics in algebra at the bottom of the list.

Yeah I see it now. Strange it wasn't showing up earlier

Starting it from today onwards. Will post updates after 2 months

start date: 20/8/2023

## -the plan for the next 22 days is to read one chapter from intro to algebra (AoPS book) each day (AT LEAST)

day1: 20/8/2023: chapter1: done

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?

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).

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.)

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).

See this comment.

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

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

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

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)

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.

Thank you

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.

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.

thanks boss for this comment

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

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

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.)

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?

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.)

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.