組合數 序列

2022-03-27 08:53:36 字數 639 閱讀 1331

時間限制: 1 sec  記憶體限制: 256 mb

5 32 4 2 3 4

39因為求的是子串行,不要求連續,所以點在集合裡是可以隨便選的,只要求出隨便選的點的中的最大值即可。

好麻煩。。換個思路,列舉最大值,找有多少個區間滿足它最大,乘上就是它對答案的貢獻。

正解get 考試時1a。

找區間直接用組合數就行了。最大就500萬,打個表就行了。

#include#include#include#include#include#define ll long long

#define mod 1000000007

using namespace std;

int n,k,a[100005];

ll ans=0,c[100005][55];

void init()

int main()

{ cin>>n>>k;

init();

for(int i=1;i<=n;i++)scanf("%d",&a[i]);

sort(a+1,a+n+1);

for(int i=k;i<=n;i++)ans=(ans+(a[i]*c[i-1][k-1])%mod)%mod;

cout<

組合數學 序列統計

題解 生成乙個長度為1 n的序列,在l,r區間中選擇數字。那麼有m r l 1個數字可以選擇,每個數字選擇的次數加起來為n,所以這是明顯的插空法。為了讓每個數字都一定會被選一次,所以左右全部 1,接下裡就是利用公式合併再盧卡斯一下了。pragma gcc optimize 2 include def...

組合數學 求組合數

對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...

排列組合數學 子串行

題目描述 給定乙個小寫字母字串t 求有多少長度為m的小寫字母字串s滿足,t是s的乙個子串行 不需要連續 輸入描述 第一行乙個字串t 第二行乙個正整數m 輸出描述 輸出答案對109 7取模的值 示例1輸入a2 輸出51 說明長度為2的裡面有a的串有51種 備註 1 t m 105 列舉終點,前面的除了...