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.