LUOGU P1680 奇怪的分組

2021-08-23 14:37:31 字數 1243 閱讀 3181

題目背景

v神的班級共有n個人,dm同學想把同學分成m組聯絡,要求第i組的人數必須大於給定的正整數ci,求有多少不同的方案?(兩個是相同的方案當且僅當對於任意的一隊i,兩個方案的第i組同學數量相等)由於結果很大,所以你只需要輸出模1000000007的值。

輸入輸出格式

輸入格式:

第一行兩個整數n和m ,後面有m行,每行乙個整數,表示ci

輸出格式:

僅有一行,乙個整數,方案數模1000000007的值。

輸入輸出樣例

輸入樣例#1: 複製

10 3

1 2

3輸出樣例#1: 複製

說明樣例解釋:

方案有三種,每組的個數分別是(3,3,4),(2,4,4),(2,3,5)。

資料範圍約定:

對於30%的資料,n ,m<= 10

對於60%的資料,n ,m<=1000

對於100%的資料,n ,m<= 1000000 ci<=1000

資料保證至少有乙個方案

本來是道sb題,硬生生搞了1個小時,相當於隔板法,每個先填c[i]+1個,然後剩餘k個,相當於把k個蘋果塞到m個盒子裡,盒子可以為空,方案數為c(n+m-1,m-1)。還有一種理解方式是每個先填c[i]個,剩kk個,把kk個蘋果塞到m個盒子裡,盒子不能為空,方案數為c(n-1,m-1) 。然後費馬小定理算出逆元。

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1000005;

const

int mod = 1e9+7;

typedef

long

long ll;

inline

int rd()

while(isdigit(ch))

return x*f;

}int n,m;

ll ans,to[maxn<<2]=;

ll fast_pow(ll x,int y)

return ret;

}int main()

ans=to[n+m-1]*fast_pow(to[m-1],mod-2)%mod*fast_pow(to[n],mod-2)%mod;

cout

0;}

LUOGU P1680 奇怪的分組

題目背景 v神的班級共有n個人,dm同學想把同學分成m組聯絡,要求第i組的人數必須大於給定的正整數ci,求有多少不同的方案?兩個是相同的方案當且僅當對於任意的一隊i,兩個方案的第i組同學數量相等 由於結果很大,所以你只需要輸出模1000000007的值。輸入輸出格式 輸入格式 第一行兩個整數n和m ...

LuoguP2759 奇怪的函式

使得 x x 達到或超過 n 位數字的最小正整數 x 是多少?這道題並沒有想出來,太丟臉了 首先注意到題目要求位數超過n位數字 考慮如何求位數,我們發現對於數n的位數就是log10 n 1 換到這道題裡就是求log10 x x 1 n的最小值的x 於是就是x log10 x 1 n的最小x值,二分即...

LUOGU P2759 奇怪的函式

使得 x x 達到或超過 n 位數字的最小正整數 x 是多少?輸入輸出格式 輸入格式 乙個正整數 n 輸出格式 使得 x x 達到 n 位數字的最小正整數 x 輸入輸出樣例 輸入樣例 1 複製 輸出樣例 1 複製 說明n 2000000000 sb題,數學高中必修一。x x 10 n 1 化簡一下就...