Round 1A 2013


  Submissions
Bullseye
11pt
Not attempted
5843/6182 users correct (95%)
13pt
Not attempted
1796/4784 users correct (38%)
Manage your Energy
12pt
Not attempted
2312/3777 users correct (61%)
23pt
Not attempted
455/1126 users correct (40%)
Good Luck
10pt
Not attempted
1359/1768 users correct (77%)
31pt
Not attempted
31/605 users correct (5%)
  Top Scores
Myth5100
Xhark100
Dlougach100
tjhance7100
mystic100
wata100
JongMan100
dzhulgakov100
pieguy100
kmod100
Practice Mode

Contest Analysis

This contest is open for practice. You can try every problem as many times as you like, though we won't keep track of which problems you solve. Read the Quick-Start Guide to get started.
Small input
12 points
Large input
23 points

Problem

You've got a very busy calendar today, full of important stuff to do. You worked hard to prepare and make sure all the activities don't overlap. Now it's morning, and you're worried that despite all of your enthusiasm, you won't have the energy to do all of this with full engagement.

You will have to manage your energy carefully. You start the day full of energy - E joules of energy, to be precise. You know you can't go below zero joules, or you will drop from exhaustion. You can spend any non-negative, integer number of joules on each activity (you can spend zero, if you feel lazy), and after each activity you will regain R joules of energy. No matter how lazy you are, however, you cannot have more than E joules of energy at any time; any extra energy you would regain past that point is wasted.

Now, some things (like solving Code Jam problems) are more important than others. For the ith activity, you have a value vi that expresses how important this activity is to you. The gain you get from each activity is the value of the activity, multiplied by the amount of energy you spent on the activity (in joules). You want to manage your energy so that your total gain will be as large as possible.

Note that you cannot reorder the activities in your calendar. You just have to manage your energy as well as you can with the calendar you have.

Input

The first line of the input gives the number of test cases, T. T test cases follow. Each test case is described by two lines. The first contains three integers: E, the maximum (and initial) amount of energy, R, the amount you regain after each activity, and N, the number of activities planned for the day. The second line contains N integers vi, describing the values of the activities you have planned for today.

Output

For each test case, output one line containing "Case #x: y", where x is the case number (starting from 1) and y is the maximum gain you can achieve by managing your energy that day.

Limits

1 ≤ T ≤ 100.

Small dataset

1 ≤ E ≤ 5.
1 ≤ R ≤ 5.
1 ≤ N ≤ 10.
1 ≤ vi ≤ 10.

Large dataset

1 ≤ E ≤ 107.
1 ≤ R ≤ 107.
1 ≤ N ≤ 104.
1 ≤ vi ≤ 107.

Sample


Input
 

Output
 
3
5 2 2
2 1
5 2 2
1 2
3 3 4
4 1 3 5
Case #1: 12
Case #2: 12
Case #3: 39

In the first case, we can spend all 5 joules of our energy on the first activity (for a gain of 10), regain 2 and spend them on the second activity. In the second case, we spend 2 joules on the first activity, regain them, and spend 5 on the second. In the third case, our regain rate is equal to the maximum energy, meaning we always recover all energy after each activity - so we can spend full 3 joules on each activity.

This contest is open for practice. You can try every problem as many times as you like, though we won't keep track of which problems you solve. Read the Quick-Start Guide to get started.
Small input 1
10 points
Small input 2
31 points

Problem

Maryam and Peiling have recently been practicing a new number trick, and they need your help to get it right. The trick goes as follows: Maryam starts by picking N independent random integer numbers, each between 2 and M, inclusive, appearing with equal probability, and writes them down on N cards, one number per card. Note that some numbers might be equal. Then, she repeats the following K times: take a random subset of cards (each card is taken with probability 0.5), and write down the product of the numbers on those cards. Having done all that, she shows all K products to Peiling, and Peiling's goal is to guess what the original N numbers were, knowing just N, M, and the products.

An example game with N=3, M=4, K=4 might go like this: first, Maryam picks 3 random numbers between 2 and 4, inclusive - let's say she randomly chose A1=3, A2=3 and A3=4. Then, she calculates four products of random subsets of those three numbers. For example, let's say those products are A1*A2=9, A3=4, A1*A2*A3=36, and 1=1 (the last product has no numbers in it, so it's equal to 1). Peiling receives numbers 9,4,36,1 from her, and she's also told that N=3 and M=4. In this case, just seeing the number 36 is enough to find what the original numbers were, since the only way to represent that as a product of up to 3 numbers, each up to 4, is 3*3*4. So Peiling says that the original numbers were 3, 3 and 4, and the audience is impressed.

In some other cases, guessing the original numbers is not as simple. For example, it might happen that all products are equal to 1. In that case there is no way to know anything about the hidden numbers, so Peiling cannot always be right. However, Peiling knows that Maryam follows the procedure exactly as described above: she selects the first N numbers as independent uniform integers between 2 and M, and then selects K independent random subsets, picking each number into each subset independently with probability 0.5. Help Peiling use that knowledge to make better guesses!

Solving this problem

This problem is a bit unusual for Code Jam. You will be given R independent sets of K numbers each, and should print an answer for each set — this part is as usual. However, you don't need to get all of your answers right! Your solution will be considered correct if answers for at least X sets are correct, with the value of X given in the Limits for the given input, below. However, you must follow the output format, even for sets in which your answer doesn't turn out to be correct. The only thing that can be wrong on any sets, yet still allow you to be judged correct, is the digits you output; but there should still be exactly N digits printed for each case, and each digit must be between 2 and M.

This problem involves randomness, and thus it might happen that even the best possible solution doesn't make X correct guesses (remember the situation when all products are equal to 1?) for a certain input. Because of that, this problem doesn't have a Large input, but instead has two Small inputs. That means you can try again if you think you got unlucky. You may only attempt to solve the second Small input once you have solved the first one. Otherwise, both Small inputs work in the same way as Small inputs for any other problem: you may try multiple times, and there is a 4-minute penalty for incorrect submissions if you later solve that input, even if the only reason you got it wrong was chance.

Good luck!

Input

The first line of the input gives the number of test cases, T, which is always equal to 1. The second line of the input file contains four space-separated integers R, N, M and K, in that order. The next R lines describe one set of K products each. Each of those lines contains K space-separated integers — the products that Maryam passes to Peiling. It is guaranteed that all sets in the input are generated independently randomly according to the procedure from the problem statement.

Output

On the first line, output "Case #1:". On each of the next R lines output N digits — your guess for Maryam's hidden numbers for the corresponding set of products. You can print the numbers for each set in any order, but there must be exactly N digits, each between 2 and M, inclusive (note that M<10, so none of the numbers will be more than one digit). Do not put spaces between the digits.

Limits

First Small dataset

T = 1.
R = 100.
N = 3.
M = 5.
K = 7.
You need to get at least X=50 sets right.

Second Small dataset

T = 1.
R = 8000.
N = 12.
M = 8.
K = 12.
You need to get at least X=1120 sets right.

Sample


Input
 

Output
 
1
2 3 4 4
9 4 36 1
1 1 1 1
Case #1:
343
222

Note

The sample input doesn't follow the limitations for either input. In the sample input, you need to get at least X=1 sets right.

In the sample input, Maryam picked the numbers 3, 3, 4 the first time, and the numbers 2, 4, 4 the second time. In the sample output, Peiling guessed correctly the first time, but not the second time.

Overview  |  Problem A  |  Problem B  |  Problem C

The luck factor

This problem is unusual in that you do not have full information and are forced to make guesses as part of the solution. We thought it would be a fun change from the usual deterministic setting.

Nevertheless, luck did not play a huge role in this problem. The first dataset was easy enough for many approaches to work. The second dataset was harder, but we estimated that an optimal solution would have very good chances: the probability of an optimal solution failing is only on the order of 1 in a million! This is because 8000 is a lot of independent guesses, and the limit X is rather conservative: about 5 standard deviations below the expected number of correct guesses.

The optimal strategy

One may be tempted to apply various heuristics to try to reason about what kind of hidden numbers are likely. In this case, it is best to approach the problem scientifically and simply always go for the highest probability of success!

In order to do that, we compute the probability of each of the 18564 possibilities (for the larger dataset) and pick the largest one.

Why 18564? There are 7 choices for each of the 12 hidden numbers. That seems to give 712 = 13841287201 possibilities, which is a lot. But, the order of hidden numbers doesn't matter, which reduced the number of different possibilities to (12+7-1) choose (7-1) = 18564. Try to derive this formula! Or just generate them all and count.

A priori probabilities: K=0

What if K=0, so we have no information about the hidden numbers at all? It may seem like then it doesn't matter what we guess, since all possibilities are equally likely. Many contestants made this mistake. Some possibilities are more likely a priori than others, even without any additional information!

For example, for the small dataset: 333 is less likely than 234. 6 times less likely, to be exact. Why? Because 234 may have been generated in 6 different ways (234, 243, 324, 342, 423, 432) while 333 can be generated in only 1 way.

In general, if digit d appears Cd times among hidden cards, the probability of that set is N! / (C2! * ... * CM! * (M-1)N).

K=1 and Bayes' theorem

So we have computed the a priori probability of every set of hidden cards, but that does not use the crucial available information: the K products of random subsets. How do we use that information? Conditional probabilities are the right tool for the job.

Let's start with K=1. For each set of hidden numbers, A, we already know the probability of that set happening, Pr(A). We also know a product p of a random subset of these numbers. What we are trying to compute is the conditional probability that the hidden set is A given that the product of a random subset is p. Let's write that as Pr(A | p).

How to compute that? Use the definition of conditional probabilities:
Pr(A | p) = Pr(Ap) / Pr(p) = Pr(A) * Pr(p | A) / Pr(p)
This derivation is called Bayes' theorem.

We already know Pr(A), so we only need to know Pr(p | A). We can pre-compute these values for every A. Simply try every possible subset of each possible set of hidden numbers, see what the products are in each case, and build a large table of all these probabilities. There are 18564 * 212 ≈ 76 million such subsets.

Pr(p) can then be computed as the sum of Pr(A) * Pr(p | A) over all A.

The complete solution

K is greater than 1, but that's not a problem: we iterate the above reasoning for each of the K products, adjusting the probabilities of the hidden combinations in the process.

The full solution is then:

  • Some precomputation:
    • Generate all possible combinations of hidden numbers, ignoring order.
    • Compute the initial probability of each of these hidden sets.
    • For each possible hidden set, find all possible products of subsets and compute Pr(p | A). Index these values by p for easy lookup later.
  • For each hidden set:
    • Start with the pre-computed initial probability distribution over possible hidden sets.
    • Read one product p at a time, and adjust the probability distribution by using Bayes' theorem and the pre-computed conditional probabilities Pr(p | A).
    • Output the most probable possibility.
Category  Asked  Question  Answered  Answer
Manage your Energy
Announcement
23:37In "Manage your Energy" in the input, R > E sometimes, even though the problem statement says it shouldn't.27:29The "limit" saying R <= E has now been replaced with a different limit for R; it is *not* required to be <= E.
You cannot ask questions at this time. Please email us at codejam@google.com.
You have 0 submissions.