Connection Status:
Competition Arena > MinskyMystery
SRM 529 · 2011-11-22 · by misof · Math, Simple Search, Iteration, Simulation
Class Name: MinskyMystery
Return Type: int
Method Name: computeAnswer
Arg Types: (long long)
Problem Statement

Problem Statement

Marvin plays a simple game. The game is played with an infinite supply of marbles and five bags, labeled "bag 0" through "bag 4".

At the beginning, Marvin takes N marbles (where N is a nonnegative integer) and places them into bag 0. The remaining four bags are left empty. Marvin then follows this simple algorithm:

    Add a marble into bag 1.
    Repeat forever:
        Add a marble into bag 1.
        Empty bag 4.
        While there are marbles in bag 0:
            While there are marbles both in bag 0 and in bag 1:
                Remove a marble from bag 0.
                Remove a marble from bag 1.
                Add a marble into bag 2.
                Add a marble into bag 3.
            End While
            Add a marble into bag 4.
            If bags 0 and 1 are both empty:
                Move all marbles from bag 3 to bag 4.
                TERMINATE THE GAME
            End If
            Move all marbles from bag 3 to bag 1.
        End While
        Move all marbles from bag 2 to bag 0.
    End Repeat

You are given a long N. Count the number of times a marble enters a bag during Marvin's game. That is, compute X+Y, where X is the number of times a marble is added to some bag, and Y is the number of times a marble is moved from one bag to another. To avoid overflows, return just the value ((X+Y) modulo 1,000,000,009). If Marvin's game does not terminate for the given N, return -1 instead.

Notes

  • Suppose there are M marbles in bag A. The instruction "Move all marbles from bag A to bag B." then counts as M individual moves.
  • Note that N is allowed to be zero.

Constraints

  • N will be between 0 and 10^12, inclusive.
Examples
0)
2
Returns: 9
1)
3
Returns: 27
2)
4
Returns: 16
3)
2401
Returns: 59058
4)
0
Returns: -1

Submissions are judged against all 172 archived test cases, of which 5 are shown here. Case numbers match the judge’s.

Coding Area

Language: C++17 · define a public class MinskyMystery with a public method int computeAnswer(long long N) · 172 test cases · 2 s / 256 MB per case

Submitting as anonymous