CSI 4v96: Competitive Learning, Spring 2012


This course is a topics course in problem solving and algorithms. It is modeled on the collaborative and competitive environments at the ACM International Collegiate Programming Contest. Each week we will discuss a topic, and the assignments will be programming-based problems related to that topic.

Practical information

Lectures are from 2:30 to 3:20 PM in Rogers 113 on Mondays.

My office is in the Rogers Engineering and Computer Science building, and office hours are listed on my home page. I am glad to talk to students during and outside of office hours. If you can't come to my office hour, please make an appointment for another time, or just stop by.


Here is a schedule of the material we will cover. As the semester progresses, the relevant problems will be listed under each topic.

  1. Week 1 (Monday, Jan 9): Introduction to Problem Solving
  2. Week 2 (Wednesday, Jan 18): Elementary Data Structures -- The C++ Standard Template Library or Java Collections, including sequence containers, iterators and basic template algorithms
  3. Week 3 (Monday, Jan 23): Sorted associative set and map data structures and their implementations in C++ STL or Java Collections
  4. Week 4 (Monday, Jan 30): Strings and string algorithms, searching, sorting
  5. Week 5 (Monday, Feb 6): First Local Contest — Email the professor to receive the problems
  6. Week 6 (Monday, Feb 13): Sorting and applications to uniqueness testing, deleting duplicates, selection, efficient searching, and set intersection/union
  7. Week 7 (Monday, Feb 20): Arithmetic and algebra, big number implementation, prime factorization
  8. Week 8 (Monday, Feb 27): Arithmetic and algebra, number theory, counting problems, modular arithmetic
  9. Week 9 (Monday, Mar 5): Elementary Search Topics, recursive depth-first search, combination and permutation generation, state space traversal
  10. Week 10 (Monday, Mar 19): Second Local Contest — Email the professor to receive the problems. Also, problem writeups are due.
  11. Week 11 (Monday, Mar 26): Intermediate Search Topics, search pruning and ordering
  12. Week 12 (Monday, Apr 2): Simulation problems
  13. Week 13 (Monday, Apr 9): (No class meeting) Disjoint set data structure, path compression algorithm, and applications
  14. Week 14 (Monday, Apr 16): Representing, counting, and computing on grid-oriented data; rectangular, hexagonal, and triangular grids
  15. Week 15 (Monday, Apr 23): Final Local Contest — In class, and out. Email the professor to receive additional problems

Textbooks & resources

There is no required text for this course. However, the following books may be useful:

Further online resources:

Course handouts

Project submissions

To submit your projects, use the upload site. Log in with your normal BearID and password. There you should find two options: submission for a Java project, or submission for a C++ project. For Java, your main class should be public and should be called Driver.

We will use the same upload assignment to submit and test all the projects. So that the upload site can tell which project you're submitting, you should include in your source a comment with the following text:

where N is the three-digit assignment number (e.g. 070 or 289). If you don't set this correctly, your code will not be evaluated correctly. When you click test, the upload site will compile and evaluate your code, and email you the response.


Grades will be assigned based on the following breakdown:

Final letter grades will be assigned at the discretion of the instructor, but here is a minimum guideline for letter grades:
A: 90-100, B+: 88-89, B: 80-87, C+: 78-79, C: 70-77, D: 60-69, F: 0-59

Solving problems

Each problem completed within 1 week of it being assigned earns 2 points. Each problem not completed within a week but completed by the end of the semester earns 1 point. Completing a program means passing the tests on the upload site.

For weeks designated as "contests", the problems will not be publicly posted to the web. You should choose a 3 hour window during which you plan to work on the problems. Send your professor an email about 24 hours in advance of this time, and he will send you the problems via email. Then work on the problems during your chosen time frame.

Writing problems

Students taking the course for the second (third) semester must develop one (two) problems of their own. This includes:

Here is a template you should follow closely that contains all these files. What you hand in should be very similar in format to these files.

These problems are due at the last class meeting of the semester. You must also submit via email to the professor your ideas for your problem(s) the 3rd class meeting, and a draft of the completed writeup on the 10th meeting.


Academic honesty

I take academic honesty very seriously. Many studies, including one by Sheilah Maramark and Mindi Barth Maline have suggested that "some students cheat because of ignorance, uncertainty, or confusion regarding what behaviors constitute dishonesty" (Maramark and Maline, Issues in Education: Academic Dishonesty Among College Students, U.S. Department of Education, Office of Research, August 1993, page 5). In an effort to reduce misunderstandings, here is a minimal list of activities that will be considered cheating in this class:

Copyright © 2012 Greg Hamerly, with some content taken from a syllabus by Jeff Donahoo.
Computer Science Department
Baylor University

valid html and css