How someone can be a good acm solver?

After learning a language suppose C what should he/she learn? which sector computer science or math to be a good programmer, a good acm solver ?

Expecting advice from experienced acm solver.

## How to be a good acm solver

**Moderator:** Board moderators

(21:22:01) tomek> nitdgp: you need a few things

(21:22:05) tomek> nitdgp: math

(21:22:12) tomek> nitdgp: motivation

(21:22:29) tomek> nitdgp: algorithmics knowledge

(21:22:55) tomek> nitdgp: math+algorithms - algorithm/data structures design skills

(21:23:14) tomek> nitdgp: a programming language

(21:23:19) tomek> nitdgp: and coding practice

(21:23:20) nitdgp> cormen is rite book na?

(21:23:23) tomek> nitdgp: that's about it :)

(21:23:55) nitdgp> oh dear so nice of u... thanks a lot..

(21:24:48) tomek> nitdgp: later you may want to learn some complexity theory, np-completeness and such

...

(21:27:30) tomek> nitdgp: you can start by solving problems from a book [cormen], implementation is an easier skill and a different one

- little joey
- Guru
**Posts:**1080**Joined:**Thu Dec 19, 2002 7:37 pm

Sources I use are:

- Google; it's easy to learn how to use it and almost everything that's on the net can be found with it.

- Cormen; essential for every serious programmer.

- Programming Challenges; nice, but contains some nasty errors (my version does). Useful for the beginning problem solver.

- The Algorithm Design Manual; for the advanced solver. Is more a dictionary of current algorithmic knowledge, than a practical guide to problem solving. But is a good starting point for further research.

- A Math Compendium (in Dutch); contains essential mathematical concepts. I guess every language has something like it. I use it a lot to look up formulas that I tend to forget.

- http://www.geometryalgorithms.com/algorithm_archive.htm; very useful for solving geometry orientated problems.

- An English/Dutch dictionary; an English/Bangla dictionary would be more useful in your case

And then some more tips:

- Be eager; to be able to solve some problems you need a lot of perseverance. Make the problem your personal friend/enemy. Use dead time (waiting on the bus, at your dentist, visiting your in-laws, etc.) thinking about unsolved problems. Guess most people would call this crazy rather than eager.

- Don't be satisfied with easy solutions, make a solution that gives you a sense of pride. For most problems it is easy to hack together some unreadable code that just gets AC. When you get accepted, go over your code again and see where it can be improved. One criterion might be: will I be able to guess what this problem is about without reading the problem description, but just looking at the code? Use sensible variable and function names; make small, well named functions, and don't cram everything together in one function main(). A clearly structured program will make it easier to find errors and/or bottle necks. Also: compare your run time with others. If your program runs much longer than average, then you probably missed something. Hunt it down.

- When learning algorithms, refrain from using built-in solutions for 'trivial' tasks like sorting, hashing, min/max-queues, vectors, strings, lists, etc., but code them out yourself. This will improve your basic programming skills and increase your problem solving abilities. Use simple concepts until you master them, and then take the next step.

- Hunt the internet for the problems you can't solve. Lots of problems in the archive first appeared in an online contest and solutions, datasets and/or hints can be found for many of them. Needles to say that you don't copy the solutions, but try to understand them and create your own.

That's about it. Follow my advise, and in about 5 years time you will be able to solve almost all problems

- Google; it's easy to learn how to use it and almost everything that's on the net can be found with it.

- Cormen; essential for every serious programmer.

- Programming Challenges; nice, but contains some nasty errors (my version does). Useful for the beginning problem solver.

- The Algorithm Design Manual; for the advanced solver. Is more a dictionary of current algorithmic knowledge, than a practical guide to problem solving. But is a good starting point for further research.

- A Math Compendium (in Dutch); contains essential mathematical concepts. I guess every language has something like it. I use it a lot to look up formulas that I tend to forget.

- http://www.geometryalgorithms.com/algorithm_archive.htm; very useful for solving geometry orientated problems.

- An English/Dutch dictionary; an English/Bangla dictionary would be more useful in your case

And then some more tips:

- Be eager; to be able to solve some problems you need a lot of perseverance. Make the problem your personal friend/enemy. Use dead time (waiting on the bus, at your dentist, visiting your in-laws, etc.) thinking about unsolved problems. Guess most people would call this crazy rather than eager.

- Don't be satisfied with easy solutions, make a solution that gives you a sense of pride. For most problems it is easy to hack together some unreadable code that just gets AC. When you get accepted, go over your code again and see where it can be improved. One criterion might be: will I be able to guess what this problem is about without reading the problem description, but just looking at the code? Use sensible variable and function names; make small, well named functions, and don't cram everything together in one function main(). A clearly structured program will make it easier to find errors and/or bottle necks. Also: compare your run time with others. If your program runs much longer than average, then you probably missed something. Hunt it down.

- When learning algorithms, refrain from using built-in solutions for 'trivial' tasks like sorting, hashing, min/max-queues, vectors, strings, lists, etc., but code them out yourself. This will improve your basic programming skills and increase your problem solving abilities. Use simple concepts until you master them, and then take the next step.

- Hunt the internet for the problems you can't solve. Lots of problems in the archive first appeared in an online contest and solutions, datasets and/or hints can be found for many of them. Needles to say that you don't copy the solutions, but try to understand them and create your own.

That's about it. Follow my advise, and in about 5 years time you will be able to solve almost all problems

The biggest problem with most problems is not how to solve the problem, but how to not solve what is not the problem.