列表

详情


QY22. 奶牛编号

描述

牛牛养了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

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 236KB, 提交时间: 2019-02-05

#include <stdio.h>
int main()
{
	long long sum=0; 
	int x[51], n, i, j, t, k;
	scanf("%d", &n);
	for(i=0;i<n;i++)
	{
		scanf("%d", &x[i]);
	}
	//由小到大排序
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i;j<n;j++)
		{
			if(x[j]<x[k])
			{
				k=j;
			}
		}
		t=x[k];
		x[k]=x[i];
		x[i]=t;
	}
	sum=x[0];
	for(i=1;i<n;i++)
	{
		
		sum=sum%1000000007*(x[i]-i)%1000000007;
	}
	


	

	printf("%d\n", sum);








	return 0;
}

Pascal 解法, 执行用时: 2ms, 内存消耗: 288KB, 提交时间: 2017-12-15

var
  a:array[0..1001]of longint;
  t,ans:int64;
  i,n:longint;
procedure sort(l,r: longint);
      var
         i,j,x,y: longint;
      begin
         i:=l;
         j:=r;
         x:=a[(l+r) div 2];
         repeat
           while a[i]<x do
            inc(i);
           while x<a[j] do
            dec(j);
           if not(i>j) then
             begin
                y:=a[i];
                a[i]:=a[j];
                a[j]:=y;
                inc(i);
                j:=j-1;
             end;
         until i>j;
         if l<j then
           sort(l,j);
         if i<r then
           sort(i,r);
      end;



begin
  ans:=1;
  read(n);
  for i:=1 to n do read(a[i]);
  sort(1,n);
  for i:=1 to n do
    begin
      t:=(a[i]-i+1);
      if t<=0 then begin
                     write(0);
                     halt;
                   end;
      ans:=(ans*t)mod 1000000007;
    end;
  write(ans);
end.

上一题