糖果店(組合數學)

2022-06-08 22:09:11 字數 1635 閱讀 9075

bob和jerry 是一對親密無間的朋友,他們都非常喜歡吃糖果。這一天,他們來到了華東交大acm集訓隊的糖果店購買糖果,糖果店中從左到右擺放著n種糖果,第i種糖果有乙個美味值a[i]。bob和jerry有乙個非常奇怪的愛好,他們總是會購買美味值最低的和美味值最高的糖果。除此之外,bob購買時必定會挑選擺放在一起的糖果,jerry卻沒有這個限制。請問bob和jerry分別有幾種不同的購買方式。如果兩種購買方式包含不同種類的糖果,則認為是不同的。

第一行輸入數字t,表示接下來將輸入t組資料。(t <= 10)

對於每一組資料,會輸入兩行:

第一行輸入數字n,表示糖果店中有n種糖果 (n <= 100,000)

第二行輸入n個數字,每乙個數字都小於等於100000。第i個數字表示第i種糖果的美味值。

分別輸出bob和jerry購買方式的數目

示例1複製

2

31 2 3

4 1 4 3 4

複製

1 2

3 6

第一組資料有三種糖果,美味值最大值為3、最小值為1,bob可以選擇購買第1、2、3種糖果,jerry可以購買第1、3種糖果或者第1、2、3種糖果,因此答案分別是1和2

第二組種最大值為4,最小值為1.bob可以選擇購買第1、2種或第1、2、3種或第1、2、3、4種。jerry可以購買第1、2種或第1、2、3種或第1、2、4種或第1、4種或第1、3、4種或第1、2、3、4種。答案分別是3和6。除此之外bob無法購買第1、4種,因為這兩種糖果沒有擺放在一起。也無法購買第1、3種,因為沒有購買美味值最大的糖果。

#include#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=1e5+100

;const

int mod=1e9+7

;ll qpow(ll a,ll b)

a=(a*a)%mod;

b/=2

; }

return ans%mod;

} ll a[maxn];

ll n;

intmain()

if(ma==mi)

int cnt=0

;

for(int i=1;i<=n;i++)

else

if(a[i]==mi)

else

}ll ans1=0

; ll p=0;//

最小 ll z=0;//

最大 ll ans=0

;

for(int i=1;i<=n;i++)

else

if(a[i]==ma)

ans+=min(p,z);

}ans1=(((qpow(2ll,cm)-1)%mod*(qpow(2ll,ci)-1)%mod)%mod*(qpow(2ll,cc))%mod)%mod;

printf(

"%lld %lld\n

",ans%mod,ans1%mod);

}}

組合數學 求組合數

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

數學 組合數學

mod must be a prime const int mod 1e9 7 namespace combinatory ll inv ll x ll fac maxn invfac maxn void initc int n ll a ll n,ll m ll c ll n,ll m ll d ...

組合數學筆記

從n個數中選m個數,每個數至多選一次,方案數 性質 c n,0 c n,n 1 c n,m c n,n m c n,m c n 1,m 1 c n 1,m 楊輝三角 二項式展開 x y n i 0.n c n,i x iy n i 那這裡先說一下楊輝三角 前提 每行端點與結尾的數為1 每個數等於它上...