Блог пользователя Rei

Автор Rei, 13 лет назад, По-русски
Задача A.
В этой задаче требовалось лишь провести эмуляцию ходов блохи достаточное количество раз. Действительно, после 2n шагов блоха переместится на 1 + 2 + ... + 2n = n(2n + 1) кочек по часовой стрелке, то есть вернется в исходную позицию. Более того, следующие ее прыжки будут такими же как в начале, так как 2n ≡ 0(modn). Поэтому после 2n прыжков блоха не посетит никакие новые кочки. Таким образом, достаточно проэмулировать первые 2n шагов и проверить посещены ли все кочки.
На самом деле, нетрудно доказать, что блоха посетит все кочки в точности тогда, когда n --- степень двойки и получить альтернативное решение. Например, такое: printf("%s", n&(n-1) : "NO" ? "YES");
Разбор задач Codeforces Beta Round 51
  • Проголосовать: нравится
  • +14
  • Проголосовать: не нравится

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А n шагов хватит? По крайней мере на первых 100000 такое решение дает правильный ответ.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Да, когда ответ "YES", то есть на степенях двойки, все кочки обходятся за n шагов. Только обосновать это чуть труднее.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Can you please explain how did you deduce that answer will be yes only when n is a power of 2??
  • 13 лет назад, # ^ |
    Rev. 5   Проголосовать: нравится +4 Проголосовать: не нравится
    Let n be a power of two: n = 2m. Let us prove that first n - 1 jumps will end at different hassocks. Really, jump with number k ends at hassock . Suppose that jumps k1 and k2 ends at the same hassock. It means that . So we get that k12 + k1 - k22 - k2 = (k1 - k2)(k1 + k2 + 1) is divisible by 2m + 1. But k1 - k2 and k1 + k2 + 1 have different parity and both less than 2m + 1. A contradiction. So we derive that all hassocks will be visited after first n - 1 jumps.

    If n isn't a power of two, then n is divisible by some odd prime p. Let's look at hassocks not mod n, but mod p. We will see that not all residues (mod p) will be visited. Indeed after p jumps flea returns to initial residue mod p, because is divisible by p. And after that jumps would be the same as in the beginning (mod p), because p is divisible by p. Moreover, even after p - 1 jumps flea returns to initial residue mod p. So there are p - 1 different residues as maximum. Thus not all hassocks will be visited.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
>> printf("%s", n&(n-1) : "YES" ? "NO")
Наоборот же
n&(n-1) : "NO" ? "YES"
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Ya please explain why n should be a power of 2 ?