题意
有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) 
京公网安备 11010502036488号