When submitting a solution in C++, please select either C++14 (GCC 6-32) or C++17 (GCC 7-32) as your compiler. ×

mistborn's blog

By mistborn, 4 years ago, In English

Say we are given the number of occurrences of each letter (lower case english alphabet). We have to find the number of all k length strings (unique) that can be formed using these letters (MOD 1e9 +7).

Example: a:2, b:1, c:1

k = 2

aa ab ac bc ca cb ba

Answer: 7

Constraints:

k <= 1e5

Total number of characters <= 1e5

I couldn't solve it. Any input is appreciated.

  • Vote: I like it
  • +8
  • Vote: I do not like it

»
4 years ago, # |
Rev. 3   Vote: I like it +6 Vote: I do not like it

Right now I can only think of an ugly solution involves FFT.

The answer is the coefficient of $$$x^{k}$$$ in the result of $$$\prod_{i=1}^{n}(\sum_{j=0}^{min(a_i,k)}\frac{x^j}{j!})$$$ times $$$k!$$$ if $$$a_i$$$ denotes the max number of ith character we may have in this string.

Multiplication of two polynomials can be done in time $$$O(|degree \ of \ polynomial|\times log)$$$. So if we carefully multiply the two polynomials with the smallest degrees each time, this solution should be able to squeeze in the time limit.