elizabeth_zou_fanboi's blog

By elizabeth_zou_fanboi, history, 8 hours 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

»
8 hours 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).

»
8 hours ago, # |
  Vote: I like it +1 Vote: I do not like it

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

Could you clarify please?

  • »
    »
    8 hours ago, # ^ |
      Vote: I like it 0 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.

»
7 hours ago, # |
  Vote: I like it -14 Vote: I do not like it

Step 1: Generate all permutations of length $$$N$$$.

Step 2: Perform a linear scan, adding $$$1$$$ to the result if $$$|a_i - i| \ne k$$$ for all $$$i$$$ from $$$1$$$ to $$$N$$$.

Space complexity is $$$O(N \cdot N!)$$$ and time complexity is $$$O(N \cdot N!)$$$.

»
6 hours ago, # |
  Vote: I like it 0 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?

  • »
    »
    4 hours ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    how would you calculate the dp tho

    (ok nvm i figured it out)