題目描述
牛牛養了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
數學排列類問題。若x[i] > x[j],則x[i]要減去x[j]中選擇的一種可能情況,及總數爲x[j] * (x[i] - 1),以此類推。
所以從小到大排序的話,每次乘以已經選擇的n種情況就可以了。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> v(n);
for(int i = 0; i< n; i++)
cin >> v[i];
sort(v.begin(), v.end());
long long ans = 1;
int cnt = 0;
for(int i = 0; i < n; i++)
{
ans *= (v[i] - cnt);
ans %= 1000000007;
cnt++;
}
cout << ans << endl;
return 0;
}