這題目最原始的想法我們先對序列排序,發現每個數的貢獻其實就是先找到比他小的數的個數記為cnt
然後列舉這個數所在的位置,之後就可以從cnt中選j-1個填到前面,然後還要進行排列
但是這樣超過了複雜度,所以我們考慮優化這個組合數表示式,首先是簡單的約分
約後,我們發現上下兩個階乘中間的數相減就是乙個常數,如果遇到這種情況,可以在外面乘上這個常數的階乘,然後求和裡面除掉。就能把求和變成乙個組合數
根據楊輝三角變化,就能變成乙個可以直接計算的答案了
#include#includeview code#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int n=1e6+10
;const ll mod=1e9+7
;ll a[n];
ll qmi(ll a,ll b,ll mod)
return res%mod;
}int
main()
sort(a+1,a+1+n);
ll ans=0
;
intj;
for(i=1;i<=n;i=j)
cout
return0;
}