Computer Programming Contest Preparation Class

Problem Solving in Computer Science

Spring 2004 -- CSC 3999 Section 4

[Isaac's Home Page ]  [Fun Page ]  [Class Page ]  [Printable ]  
 Home
 Outline/Policy
 Summary
 Approach
 References
 
 Library:
   Large Number
 
 Problems:
   Archive
   Categories
 
 Extra:
   Grades
   Tools
   Music
 
 Practice
   The Matrix
   Others
 

Outline/Policy

Return to CSC 3999 Main Page


Introduction

Each year the ACM conducts an International Programming Contest. Student ACM chapters are invited to send teams to compete in Regional contests. The top team(s) from from each Region go on to compete in the International contest.

Many of the schools in our region compete. The LSU Computer Science Department sends at least one team to these competitions each year to represent LSU and Louisiana. Being the Flagship university of the state, LSU should send a well-prepared, competitive team.

Many schools use a formal class to prepare participants for Programming Contests. This has the advantage of providing a structured, regular training and practice environment that the students are motivated to take part in.

This course is a one hour class to create that environment at LSU. The goal this semester will be to instill fundamentals in students that will better prepare them for competition. Next fall, a follow-up course should be offered to hone the skills of the students that decide to actually compete in the next ACM Regional Programming Contest.

Return to Top of Page


Purpose of Course

The purpose of this course is to help students who are interested in competing on the ACM Programming Team. To do this, the course will have help the student understand the various components that combine to make a successful team at a Programming Contest. Individually, the students will need to learn problem-evaluation skills, problem-solving skills, coding techniques, hidden complexity recognition, time management skills and pressure handling techniques. As various sized groups, the students will have to learn how to distribute work efficiently, how to depend on each other, how to work together effectively, and how to deal with idiosyncrasies of themselves and others.

Return to Top of Page


Topics/Concepts to be Covered

This course will be organized so that each of the different areas that the students need to gain expertise in are covered. Most activities will concentrate on a small number of areas at a time. Below is a list of many concepts that the student will be exposed to during this course:
  • Problem Evaluation - A number of problems will be presented to the students for them to analyze. During this phase, the students will be trying to recognize the actual problem underneath the written problem description. The goal is to determine what algorithm(s) will solve this problem.
  • Hidden Complexity Recognition - Many contest problems have something that makes them harder than they would appear that does not usually show up until after a solution is determined. These hidden gotchas often make a simple appearing problem into a very difficult/complex problem. Recognition of these pitfalls can help a team avoid wasting a lot of time on a deceptive problem.
  • Problem Ranking - After evaluating several problems, a team must decide which ones to implement in what order. Since penalty points are accrued for how long each problem remains unsolved, it is important to solve as many problems as possible as quickly as possible, Choosing the easiest problems first is critical.
  • Solution Testing - Taking example data and running through proposed solutions or even coded solutions is an important part of a successful effort.
  • Algorithm Implementations - Many of the problems rely on variations of a few different algorithms. Learning how to implement and adapt those algorithms can dramatically improve the success of the team. Examples of some of the algorithms are:
    • Sorting
    • Searching
    • Elimination from a list
    • Combinations
    • Permutations
    • Pattern Matching
    • Parsing
    • Numerical Principles/Relationships (rules of divisibility, sieves, clock arithmetic, ...)
  • Data Structure Tricks - Solving many of the problems easily involves coming up with a data structure that models the problem but is easy to code, modify and debug. These approaches are often referred to as tricks. Knowing a number of these tricks and be comfortable working with them can be instrumental simplifying the solution to a problem. Examples of some of these data structures include:
    • Bitmaps
    • Large-number Representations
    • Sparse Data Storage
    • Circular Queues
  • Coding Techniques - Most algorithms can be implemented many different ways. Some methods are easier to write, modify and debug than others. Being aware of multiple approaches and learning how to decide which to use when can make a huge difference in length, complexity and development time of solution.
  • Debugging Techniques - Unfortunately, not all code works the first time. Even if it works, it does not necessarily solve the problem at hand. Being able to quickly isolate why and determine what to do to transform the code is a skill that all programmers need. Being able to do it quickly may be the difference between solving an extra couple of problems.
  • Time Management - The most common statement heard after every contest is "If I/we just had a little bit longer we could have completed 1/2/3 more problems". Learning to manage time can produce the equivalent of an extra 30 to 60 minutes.
  • Resource Management - During a competition, a team has a lot of resources that must be managed: physical time, keyboard time, computation time, problem sets, paper, people skills and adrenaline. Proper management of these resources will definitely increase the probability of the team being successful.
  • Psychology - Learning to manage individual pressures and group dynamics is essential to not only success at the contest but continued friendship after the contest. Many people react very differently while under the pressure of a live contest. These difference in reactions quite often take the rest of the team by surprise. Crises management is also a potential problem. Learning to handle the stresses that can occur is essential to successful completion of the contest.

Return to Top of Page


Grading Policy

The best way to think of this class is as a lab class. Most of what you learn will come from the class discussions, attempting to solve problems, and working with others. From that perspective, the grading is oriented to encourage class participation. Basically, each interaction you miss, results in a letter grade loss (or the need to do outside work to compensate for the loss).
  • A - 92-100 points
  • B - 84-91 points
  • C - 78-83 points
  • D - 71-77 points
  • F - less than 71 points

This class will meet the following meetings:

This class will meet the following meetings:
Anticipated Class Meetings
January 20 27
February 3 10 17 24
March 2 9 16 23 30
April 6 13 20 27
May 4

  • February 24 - No class, Mardi Gras Holiday
  • March 30 - International Computer Programming Contest, Guest Instructor
  • April 6 - Spring Break
  • May 4 - Final

Each class you attend and participate in will be worth 7 points. By coming to class and participating in the activities, you can collect 91 points (enough for an B -- yes you will need to do just a little extra). Note that the final is not counted in the total number of classes (13 x 7 = 91). Grading is set this way because participation is necessary. The interaction that occurs in the class meetings will be the essence of the class. This class has no specific textbook other than the classroom, web pages developed for the class, web pages referenced for the class and handouts. This class has no tests in the normal sense. The activities that will occur in each class will take the place of review-natured tests.

Obviously everyone can not always make it to every class meeting. For this reason, students will be allowed to make up missed sessions (up to six of the meetings) by doing outside work. This outside work can include (but is not limited to) the following:

  • Helping with High School Programming Class
  • Other relevant projects

All outside work must be approved by the instructor (check before you do).

The final will be the last scheduled class meeting (because this is a lab class, the final happens BEFORE regular finals start). You MUST attend and take the final.

Return to Top of Page





[ Powered by Red Hat Linux ] [ Powered by Apache ] [ Powered by PHP ]

The statements and opinions included in these pages are those of only. Any statements and opinions included in these pages are not those of Louisiana State University or the LSU Board of Supervisors.
© 1999, 2000, 2001, 2002, 2003, 2004 Isaac Traxler