elizabeth_zou_fanboi's blog

By elizabeth_zou_fanboi, history, 6 weeks ago, In English

a permutation is valid only if |ai — i| != k for all 1<=i<=n. Count the number of valid permutations.

Constraints: 2 ≤ N ≤ 2000

1 ≤ K ≤ N − 1

EDIT: Thanks for the explanation from methanol.

I implemented that explanation:

cpp code
»
6 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by elizabeth_zou_fanboi (previous revision, new revision, compare).

»
6 weeks ago, # |
  Vote: I like it +1 Vote: I do not like it

"how many satisfy |a_i − i| ≠ K"

Could you clarify please?

  • »
    »
    6 weeks ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    a permutation is valid only if |ai — i| != k for all 1<=i<=n.Count no of valid permutations.

»
6 weeks ago, # |
  Vote: I like it +12 Vote: I do not like it

I have a solution with inclusion-exclusion.

For some permutation $$$p$$$, let $$$x$$$ be the number of indices $$$i$$$ with $$$|p_i - i| = k$$$.

Let $$$f(i)$$$ be the sum over all permutations of $$$x \choose i$$$. The answer is $$$\sum_{i=0}^{n} (-1)^i f(i)$$$.

To compute $$$f(i)$$$, you can count the number of ways to choose a subset of indices of size $$$i$$$, and assign $$$p_i$$$ values to it such that all indices $$$i$$$ in the subset satisfy $$$|p_i - i| = k$$$, and multiply that by $$$(n - i)!$$$. You can compute a dp for each residue class modulo $$$k$$$, and then merge the answers of each residue class.

Is there a more simple solution?

»
6 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by elizabeth_zou_fanboi (previous revision, new revision, compare).