zoukankan      html  css  js  c++  java
  • 奶牛编号

    题目描述

    牛牛养了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;
    }
     
    不一样的烟火
  • 相关阅读:
    Cookie和Session的区别
    CSRF攻击与防御(写得非常好)
    AcWing397 逃不掉的路(边双)
    CF1345D Monopole Magnets(构造)
    AcWing1175 最大半连通子图(tarjan)
    西安邮电大学第五届ACM-ICPC校赛 C题 异或生成树(树形dp)
    AcWing368 银河(差分约束)
    AcWing401 从u到v还是从v到u? (tarjan)
    牛客 位数差(二分)
    AcWing367 学校网络(tarjan)
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11043942.html
Copyright © 2011-2022 走看看