I'm a second-year student from a non-computer-science background, and I'm planning to enter my school's programming competition in about two or three months. I'll have to balance preparation with coursework and self-study, so I'm looking for a focused plan rather than an enormous list of topics.
The competition uses C# in a console environment. There will be five problems to solve in one hour, with judging based on functionality (50%), program structure and design (30%), and output quality (20%). Based on what I've heard, the main topics will be arrays, strings, dictionaries and hash sets, and basic algorithms. If trees or graphs appear, they probably won't go beyond introductory BFS or DFS.
I'm not very confident yet, but I want to challenge myself and show up prepared. Which problem patterns should I prioritize, are there useful C#-specific resources or templates I should learn, and how can I build enough speed to work effectively under a one-hour time limit?
2 Answers
Speed comes from practicing the whole process, not just reading solutions. Work offline and solve timed sets using the same five-problem, one-hour format. After each session, separate mistakes caused by misunderstanding the algorithm from mistakes caused by syntax, input handling, or rushing.
Try implementing common patterns without looking them up first. If you cannot write something from memory, review it briefly and then recreate it from scratch. When practicing, explain the problem in your own words, identify the input and output, write a small example, and only then code. That routine will make unfamiliar questions feel more manageable.
With only a couple of months, prioritize exactly the topics that are likely to be tested instead of trying to learn every competitive-programming technique. Practice arrays, strings, sorting, frequency counting with Dictionary, membership checks with HashSet, prefix sums, two-pointer problems, and simple stack or queue exercises. Learn basic BFS and DFS only after those feel comfortable.
It’s also worth writing small C# templates from memory: fast input parsing, splitting or tokenizing input, common loops, sorting arrays and lists, and using Dictionary, HashSet, Queue, and Stack. Since structure and output matter too, keep your solutions readable and make sure you can format results exactly as requested.

That makes sense. I think I’ve been treating preparation as collecting topics instead of practicing the actual process of understanding and solving a problem.