I don't see the problem. All you need is a learner to map a bit string as long as the _total number of contestants_, representing the subset who are taking part, to another bit string (with only one bit set) representing the winner, or a ranked list, if you want them all (assuming you have the whole list in your training data). In the latter case you would pose it as a learning-to-rank problem.