爱奇艺校招----奶牛编号(Python)

一、题目

题目描述

牛牛养了n只奶牛,牛牛想给每只奶牛编号,这样就可以轻而易举地分辨它们了。 每个奶牛对于数字都有自己的喜好,第i只奶牛想要一个1和x[i]之间的整数(其中包含1和x[i])。
牛牛需要满足所有奶牛的喜好,请帮助牛牛计算牛牛有多少种给奶牛编号的方法,输出符合要求的编号方法总数。

输入描述:

输入包括两行,第一行一个整数n(1 ≤ n ≤ 50),表示奶牛的数量 第二行为n个整数x[i](1 ≤ x[i] ≤ 1000)

输出描述:

输出一个整数,表示牛牛在满足所有奶牛的喜好上编号的方法数。因为答案可能很大,输出方法数对1,000,000,007的模。

示例1

输入

4
4 4 4 4

输出

24

二、分析及代码

题意:给n个数代表每个奶牛的编号范围,让你求出可以有多少组不同的编号

分析:先将n个数从小到大排序,得到数组s,最小的数字最多有s[0]种取值,次小的就有s[1]-1种取值,减一是因为上一个的取值,你不能取上一个的值,依次下一个减2......代码如下:

class Solution:
    def __init__(self, n, s):
        self.n=n
        self.s=s
        
    def solve(self):
        res = 1
        self.s.sort()
        
        for i in range(n):
            res*=(self.s[i]-i)
            res=res%1000000007
        print(res)
        

if __name__=='__main__':
    n=int(input())
    s=[int(x) for x in input().split(' ')]
    res=Solution(n,s)
    res.solve()

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值