As some users have already noticed - contest rating has been added to Codeforces. For now it is in beta too, but it looks very adequate. Here's how it is calculated.
Each person is characterized by their rating, the number R. If person A's rating is RA, and person B's is equal to RB, then the formula
Before updating your rating after the end of the round, for each participant his seed is calculated, that is the place that the participant is expected to take in this competition. Thus, two things are known for each participant - his seed (the expected place) and rank (the actual place). Depending on the difference between these two values, your rating increases or decreases. If the difference is higher, your rating changes more.
There are a few technical points:
- if it is the first contest for a participant, his seed is calculated as 1 + n / 2, where n is the total number of participants in the round;
- changes in the ranking of contestants are multiplied by a correction factor such that allows the sum of ratings of the participants to remain unchanged (before and after the round).
As at TopCoder all users are divided into two divisions: the first (rating over 1500 1650) and the second (rating_ not more than 1500 1650). Not rated users fall into the second division automatically.
Wish you high rating,
MikeMirzayanov