Junior Training Sheet - Template - V5.7
Junior Training Sheet - Template - V5.7
Junior Training Sheet - Template - V5.7
- Complete and consistent roadmap for newcomers: What to solve & algorithms to learn in order
- In the bottom row, there are different sheet pages such as Faq, Topics, CF-C2
- CF-C1, C2 are (Codeforces Div2 C problems (or similar level from other OJs), but from easy to hard). Same for CF-D1, D2, D3
- Covering most of topics needed up to codeforces Div2-D
- Problems of scales 1 - 5.5 / 10 + Few harder ones
- Problems increase in difficulty per topic with intermediate easy/medium problems + ad-hoc problems
- Speed problems to maintain speed goals
- A lot of recorded videos for problems solutions, especially for the entry levels (Arabic)
- Several students followed its order and managed to solve by themselves 95% of it (up to his current sheet page)
- To be a strong contestant, one has to take care of a number of quality and quantitiy factors
==> This roadmap does its best to satisfy that
- Typical issues in our Arabian region: Guys with 700-1000 solved problems and still weak!
- Why?
A) No specific roadmap or keep switching between them
Advantages of this Sheet?
B) Training while knowing problem category / level
C) Focus on specific online judge
- Again, this sheet solves these issues
- Allows you to write down your statiscs to learn from them (e.g. you consume much time in debugging)
- Continuous refining based on feedback
This is a personal Google sheet for you [Make a copy from file MENU] to have sets of problems to solve coupled with algorithms to learn
NOTE: If u did so and still read-only format, then you are again opening my sheet (e.g. with old name), NOT your copy
For Whom? A junior is anyone who does't master solving codeforces Div2-D.
Basic Programming skills such in series C++ Programming + STL + Debugging Skills C++ is highly recommended
If you find my sheet is hard, Finish Assiut University provides an easier starting roadmap. Finish it first Novice RoadMap Online Judge
Prerequisites?
Know about our community and what is programming competitions => Watch these videos for more details
Code with any language but preferred C++ or Java. For Java: Solver to be Channel Code El Masry Channel
Training Style? You can train alone, but highly advised to find partner(s) to work with to encourage each other.
Skills Goals Moving from Junior Level to Semi-Senior Level: A one who do pretty well in CF-Div2 A, B, C, D and similar levels (e.g. TC-Div2-1000)
Knowledge Goals Understand and build fair knowledge in some algorithms in Number Theory, Dynamic Programming, Greedy, Graph Theory and Search
Sheet pages are mainly for Codeforces Div2 A, B, C, D + Problems on knolwdge topics (Mainly from UVA, SPOJ)
Each sheet has some sets, each set is ~10-15 problems....The top sets are mandatory....The below sets (after line mark) are optional
If you did well in the mandatory sets, move to next sheet...otherwise you still need training on similar level...then solve the optional problems
Please watch the videos in order, solve UVA/SPOJ problems in order. Don't skip them.
In some columns, some time recordings. This helps you to know how much time you take per a problem...use that to recognize your problems
Sheets In the level column give an estimate to the problem level from 1-2 (easy), 3-4 (medium), 5-6(hard), 7-8 (had to read editorials), 9-10 (can't solve)
In the comments column..write comments for hard problems.
Put problem Status AC (for Accepted) CS (can't solve) Other values: WA (wrong answer), TLE (time limit exceeded), RTE, MLE
If you solved a problem before, put ACX instead of AC. Don't resolve
Don't let a problem consumes more than 2-3 hours. If can't solve it, see editorials/solutions. If still can't solve it, just leave it for now.
Don't compare yourself with others. People vary in their progress
Use the following guide to assign a proper problem level
Div2-A => 1 - 2
Div2-B => 1.5 - 3
Div2-C => 3 - 5.5
Div2-D => 5 - 6.5
Problem Level Column
Div2-E => 6 - 7.5
D1-D => 7 - 8.5
D1-E => 8 - 9.5
In other words, most of the time, one shouldn't assign Div2-A problem level such as 5. But it can be: 1, 1.5, 2. Very few might be 2.5
CF136-D2-A CF (codeforces), D2 (Division 2), (136, A) is the problem URL. Note this is not Round 136 ... it is Round 97
Notations
SRM150-D2-1000 SRM 150 (Topcoder), D2 (Division 2), 1000 (3rd problem)
Moving faster Do I have to solve every problem? For Div2 (A, B, C1) => No. If you can move faster, do it. For Non CF problems (E.g. UVA), please solve all
Others Solutions If you solved a problem, please see some other accepted solutions in codeforces. You don't need to watch my linked videos unless can't solve
Awesome Competitive Programming Many awesome links - very helpful for English guys
Ahmed Elsaghir Trainnig Ahmed is senior from GUC
A2oj Ladders Don't like my sheet? Go with Ahmed Aly Ladders
External Resources
Prgramming Ahmed M sayd Arabic Programming Playlist
Programming Mohamed desouky Arabic Programming Playlist
More Resources Each video is part of a playlist
Thanks for all guys who sent sheet feedback: Mariam Alshereef, Magdy Hassan, Ahmed Yasser, Ahmed Elsayed Awad, Mohamed Nasser, Mostafa Ali Mansour, Aya elymany, Ayyad
shenouda, Others.
Special Thanks for Coach Alhussain Aly for his continuous help
Special Thanks for All volunteers in videos recording / Editorials writing
Q) What is the sheet requirements? Should I study algorithms and Data structures?
- ONLY programming skills (e.g. Programming 1 level). It is highly advised to implement 2-3 projects
- NO for OOP
- NO for datastructures, but learn STL (or Collections in Java/C#). It helps alot
- NO for algorithms, the sheet will teach you that in a smooth way
- For C++ guys (and others as guide) - first 18 videos here: https://www.youtube.com/playlist?list=PLPt2dINI2MIZPFq6HyUB1Uhxdh1UDnZMS
Q) Just started in Div2-A, could I finish its codeforces problems first, then solve the UVA/Colored problems?
- Many juniors find UVA problems in Div2-A hard, I understand
- Yes, almost same for DIv2-B. But don't do that in next sheets as order might matter, because all of such knowledge are mainly preparations for hard Div2-B or Div2-C
- However, following the order is a much better idea
- Similarly, one could finish All Div2-A/Div2-B codeforces problems, then solve their colored problems. Again, this is not the best way.
Q) Is using C# ok?
- Generally yes, but you won't be able to submit in UVA judge, as C# is not supported
- For such problems, write your code, but heavily test it. You may download an internet code and evalaute the test case on both
- On the other hand, learning Basic C++ + STL is not hard for C#/Java guys
- C++/Java/Python are official in UVA
- Codeforces allows more such as Javascript
Q) When I watch a video, should I solve the problems in its info section?
- No, sheet has subset of these problems already in specific order
- Sheet is self-contained
But let's go in details. Individual sucess in contests depends on several factors. Let me state some of them.
- Solving many problems of good quality
- Improving your different skills (reading, thinking, coding and accuracy).
-- 2 persons could solve in training the same problem. One got it in 20 min first submission, and the 2nd needed 90 minutes due to 60 minutes debugging.
- Healthy training: Regular / good times for training (e.g. morning) / weekly contests / reading other codes / collaboration with others / etc
- Stress management during contests
- Emotions management when fail in solving or feel performance is not improving enough
- Avoiding Psychological issues: Comparing to others, Negative feelings, Your image, Regretting trainging time
NOTE: If u did so and still read-only format, then you are again opening my sheet (e.g. with old name), NOT your copy
- This column is for the algorithm you used during solving. Usually, new guys in CF-A are confused. If so, leave it CF-A and start to write in CF-B
- The more you go in the sheet you will learn algorithms (e.g. Binary search, DP, DFS, etc). Then this what you write in level column
- The problem that has no algorithm but a specific idea called ad-hoc, This is the case for most of CF-A and less later
- Implementation: Means the problem request is almost direct, just code it
- Brute Force: Means instead of finding elegant solution, try all possible solutions (e.g. 3 nested loops) and select the solution
- Ad-hoc: Just per-problem thinking in a special way/analysis on how to solve the problem
- Please watch from this minute: https://youtu.be/DZ6YTtILCE8?t=839
That is, no one can give you a list that every problem for YOU is easier than the next problem.
In other words, If we gave 100 problems to 10 students of same level to solve and told them rank from easy to hard, they will rank them differently.
So, questions ordered by people average. The promise is, the problems will be within your range to solve.
Advantages:
- Mastering the algorithm till solving some hard problems in short time
Disadvantages:
- Discovering the algorithm behind the problem is an important skill. Given that you know the topic, you lose a good space to improve this skill
- Being in the mode of specific algorithm lets you solve many of it easier. However, when solving in real contests, your mind is not so active on specific topic
Claim:
- Although topics training let guys be so good early, they level stuck early and they don't improve. Seems to me, topics training is an important factor in doing so. Meanwhile, if you just target to be good in
Div2D level in shorter time and no interest in further competitions achievments, you may go topics based.
Sample Name2 Sample Link2 AC 1 5 10 35 20 70 2 No Impl My Performance Notes: This is so bad performance. He thought for little time and continued
thinking while coding. As a result, much debug time too. RULE: Think More, Code Faster
Reading
Read within 3-5 minutes for short text problem. If no, you need to work on your Reading English Skills
Never suspect later your problem understanding? If happens, you need to improve your comprehension / cases tracing
Thinking
Ready and in the challenging mood before start solving.
Striving against the problem for a reasonable time. If no, you need to change your solving spirit. Be a fighter.
Found a solution; Do verifications: text cases / extra cases / correctness / time & memory
Coding
Sketch in your mind the big picture of the code first. Don't rush for coding
Code within 10 minutes. If more, you have coding skills problem or your understanding for the approach is not complete
A lot of copy paste? Something wrong. Need a better code organization
Needed more than 10 minutes to code medium size codes? Why? Identify the issue and solve it
Debugging
Which will be faster to catch the mistake? Printing or Debugger
Don't know how to use a debugger? Learn this skill
Needed more than 10 minutes to solve bugs? Something is wrong. Why need all this time? How to solve this issue?
Code is ready!
Just submit and see if passed? Wrong. Behave as if you are in the real contest. Are you almost sure it will be AC? If yes, submit
TRAIN offline as if you are in a real contest. This shortens the gap between training and the real contest
Code Failed :(
Are you nervous / frustrated? Yes => Wrong behavior. Take it easy
Rush to test cases? Yes => Wrong, revise idea, then code, then trace more samples. Try for 15 minutes or more first
Got it AC
Read and Understood editorial solutions?
Checked 1-3 other AC solutions?
Tried to write a much shorter version of your code?
Tried to write a faster coder (better complexity)?
Speed
How much time do you need in Div2-A/Div2-B? Target (5, 10) minutes for semiseniors, (3, 6) for seniors
Not that fast? You need regular speed training on easy problems
Weakly contests
Do you participate in 1-2 contests per week at least? If no, this is bad. Offline training != Online contests
You need to train yourself to behave in online contests similar to offline training. This is an important skill.
Sheet stats
Recorded them? Yes: read your problem's row. Where do you consume the most of the time? These are your weak skills
No, I don't record! => How will you know your weak points?!
Can't record timing as I am mixing thinking with coding? => Wrong behavior. get done with thinking, then move to coding. Don't cycle
Training Time
Is it regular and scheduled? Yes => you will have regular improvements.
Your plan was to train X hours, Did so? If no, why?
Without regular and continous training, your mind might not improve well
Training with?
Yourself only? You may feel bored. If can collaborate with others = longer commitment
Psychological issues
Do you keep comparing yourself with others?
Do you have negative feelings? Like I am stupid..I am hopeless...I will never have a comparable level...?
Do you think of your image/appearance if failed in online contests so avoid contests?
Do you use another account with a weird name to train so that people don't know about your progress/failure?
Do you wish your friends fail in the contest? or get annoyed with their better performance?
Do you avoid teaching your friends something or give no support to remain better than them?
Do you feel bored/frustrated as no/weak community in your college?
Do you keep training day and night without breaks? No socialization at all?
Do you hate specific topics and avoid them (probability/geometry)?
‘Should I stop’ Dilemma? Keep thinking is it worth vs a waste of time?
If any of the above questions is YES, you probably have a problem and need to find a solution to it.
Submit Reading Thinking Coding Debug Total Problem By
Problem Name Problem Status Category Any Comments
Count Time(m) Time(m) Time(m) Time(m) Time(m) Level /10 yourself?
AC Averages => 0 0 0 0 0 0 0 0 0 0
0 This is your own sheet
0 Add here other external problems you solve
0 E.g. what you solve in codeforces contests
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Submit Reading Thinking Coding Debug Total Problem By
Problem Name Problem Status Category Any Comments
Count Time(m) Time(m) Time(m) Time(m) Time(m) Level /10 yourself?
AC Averages => 0 0 0 0 0 0 0 0 0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0