In recent one year, I don't know why but there are many people sending messages to me for asking similar problems. So I decide to create this blog.
In the beginning, I must say, you may feel disappointed after reading this blog. Because I don't have any special tips. My study method has wasted me many many time.
There are some basic points I think you have known.
Practice, practice, and practice. I take so many time to think and solve problems. I think I do it 5 hours a day on average.
Make friends with many awesome people. I know many awesome people. For example, arosusti, kelvin, peter50216(peter50216), seanwu, Shik, takaramono, tmt514, ... If I have some problems that I can't solve in few weeks, I can almost get solution from my friends.
Then I say what I do for training myself.
When I do problems. There are two possible order for choosing problem.
- Start from most people solved one.
- Solve consecutive Numbers of problems and try to solve all of them.
I don't know which one is best. But I often change the strategy. And when I feel I can't solve problems anymore from a judge. I will find a new judge and continue to do the same thing.
In fact, I think the order of doing problems is not important for me. When I read and solve 90% problems from a judge. Will you think the order of solving be important? I really don't know how to choose order is best for me. So I do almost the problems.
List some judges I use.(In fact, There are many Taiwanese judges I solved not listing in following because they don't open for all people.)
Codeforces. I think Codeforces is the best judge recently. It's easy to use and contain editorial for most problems.
Topcoder. Topcoder have many awesome problems. Even I sometimes think problems of 250 pt are also beautiful. It contain Editorial for most problems, too. (You can find problems here.|You can find editorial here.)
sgu I think sgu is the hardest judge. It contain many problems with unusual skill.
Timus There are many hard contest in the judge. I think it's good for group training.
ProjectEuler There are many good math problems in this website. After you solve a problem, you also can see how other people solve it in forum.
I think the feel between practice and competition is quite different. So sometimes I will random choose some problems from a judge to form a problemset and set time limit for training myself. But now Codeforces have function of virtual contest. We can simply do the same thing in Codeforces.
I don't choose problems by their topic. On the contrary, I study topic when I occur a problem that I cannot solve it. Then I will ask my friends whether the problem is related to some topic or google it.
I usually read AC code of other people even I can solve it. Sometimes we can found a totally different solutions, better time complexity solutions, or short solutions.
I don't study from specific websites or resources, either. I will google each thing from google respectively.
That's all what I do for studying algorithm.
Good job, thanks for advice!
P.S: Why do you think that Timus is for group training? And waht about SPOJ?
Timus have many hard contest like Petrozavodsk Training Camp Series. When we prepare for World Final. We usually use them to practice teamwork.(it's not proper for newbie)
I think SPOJ and UVa is too disorder and many duplicate problems. And it's hard to find solution from network. I think these judge should ask some experienced people to recommend problems. I use them to train my coding speed for easy problems.
USACO has also nice problems and training which is really helpful :).
USACO is good for people who learn about 2~3 years. But I think the amount of problems is not enough. (in my memory)
Hey, for a person aiming at developing a good hand with graph, dp and number theory problems which online judge would be best? Thanks.
I think any judge has function of tag satisfy your requirement. (Such as Codeforces, Topcoder)
5 hours in a day is enough sir??
Depends on how much you are able to do in those 5 hours.
If you can keep to do it for several years, I think it's enough. (the exact time I took is hard to estimate. I just choose a number I think it's enough. @@)
several years mean? at least how many years?
Ain't nobody got time for that.
Don't get disheartned when you cant solve problems. Have relistic expectations ( like dont expect to go from blue to red within 2 months). If we learn so that we know we are better person today than we were yesterday, then that is true victory.
5 hours in a day?! Really? Do you have free time?
You think it is a lot?
Even a single team training will take 5 hours per day. Without upsolving, without reading editorials, without participating in other contests...
Full-time job means 40 hours per week, while 7*5 gives you only 35 hours per week.
So you think that one can't have free time while working at full-time job?
But if dreamoon_love_AA have full-time job and still can spend 5h on trainings every day — yes, that's hard schedule :)
Out of curiosity how much time a week/day do you spend on competitive programming?
I have no idea :) And there are no fixed values.
Sometimes it is a lot (check my virtual contest participation in gym contests on January, 19 — I just did 4 quarterfinals in a row, so it was 20 hours:D ), and sometimes I don't write a single line of code for a whole day.
What's the meaning of upsolving? I saw this word several times, but couldn't get it...
Solving problem which you didn't managed to solve during contest.
Thanks. So it means the professional training prefer internal sources (problemset, lecture, template,etc)?
what do you do? You have a job?
Do you practice for 5 hours in a row? Or how do you split them during the day? Also, do you have time to do anything else? (homework, etc)
I can think problem when I'm taking bus, washing, walking, eating and so on. When thinking problems become a habit, it's not hard to practice for 5 hours a day on average.(Thinking is one of the important thing in practice.)
And I think I still have many free time to do other thing. At least I watch many anime and novel and do many sports.
But I also think I'm a very crazy person compared to most people. So I usually wonder, do you really want to ask advise about how to practice from such crazy person like me? :P (I know there are some people who are similar to me. But It' still the minority.)
How do you feel like USACO contest?
I feel both silver and golden extremely tough, probably because I still need more practice. Yet I was just curious what are the difficulty levels they appear in top coders mind.
I don't do USACO problems for at least 4 years. I don't know how is it now. In the past, I do it for some months. I think silver is too easy. And golden is still the level I can handle. And most problems are classical problems that I can find similar idea in other judge. So I don't participate any more. (Another reason is I don't like to take long time to wait result of judgement.)
What judge do you suggest to practice for IOI ?
I'm not familiar to IOI.(I prepare for IMO mainly in high school.) But I guess it's depend on the type of problems in your country for choosing competitors.
Did you go to the IMO?
No, Taiwan have too many awesome people. I can't be select to national team.
Thanks for your post, it's very helpful.
About the point:
Make friends with many awesome people..
dreamoon_love_AA Would you like to be my friend?
me also :D
He also pointed:
If I have some problems that I can't solve in few weeks, I can almost get solution from my friends.So at first, make sure that you can help him too ;)
does one need to put Kirino on userpic to improve? ^.^
I think you should put the smile of tourist...
I am depressed
Dear dreamoon_love_AA. Thank you for your nice blogs and comments :D I have some questions about studying method.
You said that you spend about 5 hours to practice (thinking, coding, reading editorials,... ). Which one you usually spend more, thinking or coding?
Do you care about how much things you have done each day? Do you think about "I must solve at least 3 problems a day" or something else?
Consider the following case: You're solving a problem on Codeforces, and you can read the editorial everywhen you want. The problem is too difficult. How much time you spend to think before open the editorial?
Do you usually write code after having found the algorithm for a problem?
I'm looking forward to your answer. Thank you :D
I guess the relation is thinking > coding >> reading editorials. my time of thinking is far more than reading editorials. For example, when I practice POI, I usually think a problem for more than three days. And I won't read editorial until I solve it. But when I'm a beginner(learn about 1~3 years), the relation is reading >> coding thinking. I study a variety of reference from books, websites and friends.
No. I don't care it. However, I will be more happy if I can do more in a day.
If it's a real time contest problem. I will read immediate after contest is end. But I will not read entire editorial. I will stop when I get new information what I don't know and continue to think. If It's not problems of real time contests, I seldom read editorial except I fell it's a problem contain huge knowledge I don't know(totally depend on my sense).
I will almost write it when I still can take part in ICPC. But I think it's not necessary...
"But when I'm a beginner(learn about 1~3 years)...."
You mean for your first roughly 3 years you followed the strategy of "reading>>coding=thinking"?
Yes. In 3. I say "I fell it's a problem contain huge knowledge I don't know". And when I'm a beginner I don't know many many thing. I still when encounter a problem I cannot solve then I start to read. I don't know whether it is a good method for training.
Is there any editorials to POI? Can you give the link?
If I'm eager to official solution, I will see it in http://oi.edu.pl/l/40/. Language is not the obstacle by translation tool.
Do you know how to translate the documents without losing formatting?
Why you didn't mention UVA despite you are ranked 7 on this OJ.
I have said some reason in this comment. Besides that, I think the frequency of system down of UVa if too often. And many problems have ambiguous or weak data. almost my friends don't solve UVa in near years. I solve it just because I'm addicted to solve problems...
So If you want to practice in UVa. I think you should take related books as reference. But I don't read any of them.
Ok, it's cool to see that someone again mentioned Project Euler. Do you have some favorite problems, dreamoon_love_AA ?
I don't know how to reply this question. I like all problems contain new idea I don't see before.
Also, if you don't mind dreamoon_love_AA, can you please tell a little more about yourself?
It would be both interesting and inspirational for the community to know your background. :)
I'm waiting for your answer, dreamoon_love_AA ;)
I think that the regional on UVALive is a good way for group training too. Especially those players who want to take part in the regional.
Hope you get your #1 as soon as possible :)
Hi, dreamoon_love_AA! I'm only have a question for u :) I'm wondering, When have you started coding, and how long have u started coding? I'm looking for hearing to u, Thank friend!
I started coding from 2006/08/09 until now.
Hey dreamoon_love_AA. Maybe my question is a bit silly,cause it is dependent the person,but because you are free to questions and I am curious I will ask it :D. How much time took you from the time you started to train in algorithms-contets,to reach in division1,and to become red?
I also start training from 2006/08/09. And other question you can see my rating graph and judge by yourself. I don't know which time I have the ability to div. 1.
Thanks for advice!
Just a word, how can we google a topic here in mainland China when google is blocked by GFW there?
I have two general questions...
1-What do you do if you can't solve a problem? For example i can easily solve div.2 A,B but it's hard for me to solve lots of div.2 C problems...What should i do?
2-How many div.2 C,D problems should i solve for training to go and stay in div.1?
Study them. Forget the thing that I can't solve them. Continue to compete.
I think maybe the number of problems is not important. I have no idea about this question.
It's nice to see how you've improved through the years ! Congrats man.
now that you're orange, pls share. your strategy man..
now that you're orange, pls share. your strategy man..
And now you're red. Congratz
Hi Batman, now that you are red, can you please share your strategy to tackle div2 C,D? How and when you started to solve div2 C,D in live contest?
question, is it right to copy paste codes ?
as if you are solving a problem that requires max flow, is it right to copy paste it from previously written code you typed. Meaning that you only need to write it once being sure with no bugs then just using it, especially for data structures.
You are my idol !!
Why i get downvote , are you guys crazy?
Don't make idols for yourselves
ask yourself — why i get downvote , is my comment so stupid
Hah you ask yourself too!
I don't choose problems by their topic. On the contrary, I study topic when I occur a problem that I cannot solve it.
I was totally agree with you in this point, but I trained for a year and when I participated in ACM-ICPC regional contest i find some problem with topic I never met before, fortunately I had competitive programming book and I could solve this problem during the contest. but what should I do to avoid such situation in the future?!
Try to solve more problems; that way, you'll encounter more topics to study.
There's no way to completely eliminate the situation you were in. However, studying topics which don't appear in programming competitions won't really help you, and if you don't encounter something even after solving many many problems, then it doesn't appear in programming competitions (or at least not with a frequency that'd make it worth studying for this purpose). Simple.
i don't have such type of friends who can help me when i face problem.in this situation from where should i learn?
Do you think participating in contests often on CF and upsolving the problems is a good way to go?
Thanks for your blog.
I have been doing CF since 1.5 years. I have solved around 530 problems in total ( Div II A 200+, Div II B 190+, Div II C 120+). I have learnt various data structures like segment tree (with lazy propagation), trie, BIT, Square root decomposition. Still I think my performance in contests is not improving. I am constantly at 1300 — 1500 rating. Should I just continue practicing or learn difficult topics used in Div I like flows. But they are of no use to me at this level.
Congrats Now you are a stable specialist :)
Thanks man, I didn't knew people notice average coders like me also. I also hope for you to succeed as well. Just keep trying and Never Give Up. A time will come when failure will fail and success will win.
Thanks bro...Your rating graph is inspirational :). Did you improve through contests /general problem practice or you did lots of virtual contests too?
I didn't do any virtual contests, but I made sure never to miss any live contest. Yes, I did practice solving harder problems. Never go for a easy one, there should be some learning with the problem.
At this moment , in how many(& which) topics you feel comfortable now? I mean , like I feel confident solving easy-medium level greedy and math problems. This question may seem silly to you but it can give me an aprox idea about what concepts are required to become a stable specialist.In live contests I could solve div2 A and B (sometimes one of them get hacked :D ) but not C.
Codechef is a pretty nice judge too. The Long contest helps in learning and acquiring new skills while testing the already existing ones, since the duration is 10 days. (basically, it's for people who like to learn a topic when they encounter a problem from that topic which they can't solve)
what most I do to be able to solve math problems like this one http://codeforces.com/contest/478/problem/B
Learn math and practice.
My math skill is too much poor. I'm coding for almost 16-18 months. I'm trying to increase my math skill from the beginning. What strategy & site should I follow? For basic math to advance? Is there any way I would find the problems or learning methods sorted by difficulty or category? Thank You O_o
why in the list of awesome friends you didn't name gennady or petr ?
Lmao. Why should the OP do so?
Do u know briansu