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

Автор habib_rahman, история, 8 лет назад, По-английски

Given N distinct integers from 1 to N, you have to find the number of ways the N integers can be rearranged in M empty slots such that, no integer matches with its slot index. Note that, slots are indexed from 1 to M.

Print the number of ways modulo 23377788.

0<=N<=M<100000 and It has 200 test cases.

I came up with a solution like this but not sure its correct or not. And have not any idea to modulu it by non prime.

  • Проголосовать: нравится
  • -7
  • Проголосовать: не нравится

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Modulo operations like addition/multiplication are done the same way as in primes. For modulo inverse, you must be careful. Note that if the number you want to find the inverse is not coprime with the mod, then there is no solution. Otherwise just calculate this number raised to the (phi(mod) — 1) power, this follows from euler's theorem.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Also, extended Euclidean algorithm can be used be calculate inverse.

»
8 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

For n ≤ M we have M - 1 variants, for n > M we have M variants. You just need two involutions by modulo and operation like ab % MOD.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится -10 Проголосовать: не нравится

    A little bit explanation please.

    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Lets consider arbitrary number n. We have only one restriction: n cannot be matched with n-th box. From the statement we know that number of boxes greater or equal to any n, thus number of ways to correctly put n to some box is M - 1 (we may put n to any box except n-th box). Total number of rearrangments is (M - 1)N % MOD. All you need is multiplying two numbers by modulo.

»
8 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

You can use in Codeforces.
\frac{N!}{(M-N)!}\times \sum_{i=0}^N (-1)^i\frac{(M-i)!}{i!(N-i)!} Add dollar sign in both sides.

»
8 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

I think you can use Chinese remainder theorem to solve your problem.

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

While it doesn't answer the general question, you can read more about derangements (permutations where ) here:

https://en.wikipedia.org/wiki/Derangement