首页 > 试题广场 >

奶牛编号

[编程题]奶牛编号
  • 热度指数:5401 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛养了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
import java.util.Arrays;
import java.util.Scanner;

public class Main {


    public static final long MAX = 1000000007;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long[] arr = new long[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }

        Arrays.sort(arr);
        long res = 1;
        for (int i = 0; i < n; i++) {
            res *= (arr[i] - i) % MAX;
            res %= MAX;
        }
        System.out.println(res);
    }
}
发表于 2019-06-15 18:31:51 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        try(Scanner in = new Scanner(System.in)){
            int n = in.nextInt(),i = 0;
            int[] a = new int[n];
            while(i < n){
                a[i++] = in.nextInt();
            }
            System.out.println(helper(a));
        }
    }
    public static long helper(int[] a){
        long res = 1;
        Arrays.sort(a);
        int c = 0;
        for(int num:a){
            res = (res * ((num - c++) % 1000000007)) % 1000000007; //先取余再乘再取余  不用等最后结果再取余
        }
        return res;
    }
}


发表于 2019-02-11 19:56:33 回复(0)