题意
有n只猫,它们可以接受不同的名字长度。问共有多少种不同的方案可以满足所有猫。
思路
- 首先我们知道名字长度有限,所以可以桶一下。表示接受名字长度为的猫的数量。
- 表示长度小于等于的小写字母组成的字符串总数。它可以这样计算
- 所以当存在某个时,无法分配。
- 如果可分配,答案为
如果觉得公式太抽象了,以样例三举例:
solution
import math mod = 77797 n = int(input()) l = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] d = [0, 26] for i in range(1, 11): d.append(d[i]+26**(i+1)) a = list(map(int, input().split())) for i in a: l[i] += 1 f = 0 for i in range(1, 11): if l[i] > d[i]: print(-1); f = 1 if f: break if f == 0: res = 1 s = 0 for i in range(1, 11): now = math.perm(d[i]-s, l[i]) res = now % mod*res % mod s += l[i] print(res)