• 奶牛编号


    题目描述

    牛牛养了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-0)*(n-1)*(n-2)*....(n-(数组长度-1));
    注意:1.前提必须是排好序的数组否则会出现负数
       2.还有就是取模的时候注意*和%优先级问题
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    #include <set>
    #include <cstdio>
    #include <string>
    #include <cstring>
    /*@author:浅滩
    *family:
    *time:
    */
    //我好像是一个在海边玩耍的孩子,
    //不时为拾到比通常更光滑的石子或更美丽的贝壳而欢欣鼓舞,
    //而展现在我面前的是完全未探明的真理之海
    using namespace std;
    
    const long long mod=1e9+7;
    int main()
    {
        long long num,i,j;
        cin>>num;
        long long arr[num];
        long long cnt[num];
    
        for(i=0;i<num;i++) cin>>arr[i];
        sort(arr,arr+num);//不排序存在一个问题cnt[i]有可能出现负数
        int t=0;//第一次没有排序导致错误
    
        for(j=0;j<num;j++)//可以不用cnt数组
        {
        cnt[j]=arr[j]-t;
        t++;
        }
    
        long long s=1;
        for(i=0;i<num;i++)
        s=(s*cnt[i])%mod;//注意不能写成s*=cnt%mod;
        //可以写成s=(s*(arr[i]-i))%mod;可以节约内存空间
        cout<<s;
    
        //cout << "Hello world!" << endl;
        return 0;
    }
     
    不一样的烟火
  • 相关阅读:
    svn 更新
    首尾渐变
    sublime常用快捷键
    【CSS3】transition过渡和animation动画
    JS实现奇偶数的判断
    style、currentStyle、getComputedStyle区别介绍
    JavaScript中判断对象类型的种种方法
    CSS3 animation动画,循环间的延时执行时间
    EMCA创建em资料库时报错
    OS Kernel Parameter.semopm
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11043942.html
Copyright © 2020-2023  润新知