公式

B - 細胞の培養 / Cell Cultivation 解説 by admin

Claude 4.5 Opus

Overview

This problem asks you to find the minimum number of “mitosis promotion” operations (operations that double the number of cells) needed to go from \(S\) cells to \(T\) cells. We need to determine whether this can be achieved within \(K\) operations.

Analysis

Key Observations

  1. Understanding the nature of operations

    • One operation doubles the number of cells
    • After \(n\) operations, the number of cells becomes \(S \times 2^n\)
  2. Conditions for reaching \(T\)

    • There must exist a non-negative integer \(n\) such that \(T = S \times 2^n\)
    • This is equivalent to “\(T\) is a multiple of \(S\)” AND “\(T / S\) is a power of 2”
  3. Verifying with concrete examples

    • For \(S = 3, T = 12\): \(12 / 3 = 4 = 2^2\), so it can be achieved in 2 operations
    • For \(S = 3, T = 9\): \(9 / 3 = 3\) is not a power of 2, so it’s impossible
    • For \(S = 5, T = 7\): \(7\) is not a multiple of \(5\), so it’s impossible

Issues with the Naive Approach

One might consider simply doubling \(S\) repeatedly to check if it reaches \(T\). Since \(K\) can be up to 100, \(2^{100}\) becomes an extremely large number. However, in this problem where \(K \leq 100\), the loop only runs at most about 100 times, so this method would still work.

In this solution, we adopt an approach that directly determines whether \(T / S\) is a power of 2.

Algorithm

  1. Check if \(T\) is divisible by \(S\)

    • If not divisible, output -1
  2. Calculate the ratio \(\text{ratio} = T / S\)

  3. Determine if \(\text{ratio}\) is a power of 2

    • Keep dividing \(\text{ratio}\) by 2
    • If an odd number (other than 1) appears during this process, it’s not a power of 2 → -1
    • If it eventually becomes 1, it’s a power of 2
  4. Check the required number of operations

    • The number of times divided by 2 is the required number of operations \(n\)
    • If \(n \leq K\), output \(n\); otherwise, output -1

Trace of a Concrete Example

For \(S = 4, T = 32, K = 5\): - \(32 \mod 4 = 0\) ✓ - \(\text{ratio} = 32 / 4 = 8\) - \(8 \to 4 \to 2 \to 1\) (divided 3 times) - 3 operations are needed, \(3 \leq 5\), so the answer is 3

Complexity

  • Time complexity: \(O(\log(T/S))\)
    • The operation of dividing \(\text{ratio}\) by 2 is proportional to the number of bits in the binary representation of \(\text{ratio}\)
    • At most about 60 times (since \(T/S \leq 10^{18}\))
  • Space complexity: \(O(1)\)
    • Only a few variables are stored

Implementation Notes

  • Be careful about integer overflow: \(S, T\) can be up to \(10^{18}\), but in Python there’s no need to worry about integer overflow

  • When \(T = S\): \(\text{ratio} = 1 = 2^0\), so it can be achieved in 0 operations (handled correctly)

  • Power of 2 check: Use temp % 2 != 0 to check if it’s odd, detecting cases where it’s not a power of 2

    Source Code

def solve():
    S, T, K = map(int, input().split())
    
    # T must be a multiple of S for it to be reachable
    if T % S != 0:
        print(-1)
        return
    
    ratio = T // S
    
    # ratio must be a power of 2
    # Check if ratio is a power of 2
    if ratio == 0:
        print(-1)
        return
    
    # Count how many times we need to multiply by 2
    # ratio must be 2^k for some k >= 0
    count = 0
    temp = ratio
    while temp > 1:
        if temp % 2 != 0:
            # Not a power of 2
            print(-1)
            return
        temp //= 2
        count += 1
    
    # Now count is the number of operations needed
    if count <= K:
        print(count)
    else:
        print(-1)

solve()

This editorial was generated by claude4.5opus.

投稿日時:
最終更新: