Newcoder 128 A 禮物(組合數學)

2021-08-28 17:59:58 字數 1945 閱讀 5201

description

假設某個店鋪有n

nn種不同型別的1

11元奧利奧和m

mm種不同型別的2

22元奧利奧,而且餘量無限,我的錢有k

kk元,我想把k

kk元都用來買奧利奧,且可以買同型別的奧利奧,你能幫我算出有多少種購買方式嗎?設答案為z

zz,這個數字也許會很大,所以我們只需要輸出zmo

dp

z\ mod\ p

zmod

p的值。

input

輸入的第一行包含乙個整數t

tt,表示測試組數。

每個測試用例前面都有乙個空白行。

每個測試用例由包含整數n,m

,k

n,m,k

n,m,

k和素數p

pp的單行組成。

( t=

100,3≤

p≤10

6,0≤

n,m≤

1000,1

≤k

≤1000

)(t=100,3\le p\le 10^6,0\le n,m\le 1000,1\le k\le 1000)

(t=100

,3≤p

≤106

,0≤n

,m≤1

000,

1≤k≤

1000

) output

對於每個測試用例輸出乙個整數:表示不同的購買奧利奧的方式的數量zmo

dp

z\ mod\ p

zmod

p的值。

sample input

0 10 2 47

2 2 4 47

5 5 10 47

sample output10

146solutionn=0

n=0n=

0時只有k

kk為偶數時可以用完所有錢買k

2\frac

2k​個2

22元的

m =0

m=0m=

0時只能買k

kk個1

11元的

n ,m

>

0n,m>0

n,m>

0時,列舉買的2

22元的個數i

ii,那麼需要買k−2

ik-2i

k−2i

個1

11元的

剩餘問題是有n

nn種物品,每種物品無限,買x

xx個的方案數,由插板法顯然得知答案為cx+

n−1n

−1

c_^cx

+n−1

n−1​

注意p

pp可能比較小,通過預處理階乘及其逆元求組合數會出問題,直接預處理組合數即可

code

#includeusing namespace std;

typedef long long ll;

int t,n,m,k,p;

int mul(int x,int y)

int add(int x,int y)

int pow(int x,int y)

return z;

}int c[2005][2005];

void init(int n=2000)

}int main()

else if(m==0)ans=c[k+n-1][n-1];

else

}printf("%d\n",ans);

} return 0;

}

Newcoder 128 F 填數字(貪心)

description 托公尺發現了一種新的遊戲 填數字 每填寫一次數字 1 i 9 1 le i le 9 1 i 9 需要花費a ia i ai 枚金幣,托公尺總共有n nn枚金幣.托公尺想知道他能得到的最大數字是多少.如果填不了請輸出 1 1 1。不需要用完所有金幣 input 第一行乙個數字...

Newcoder 128 B 麻婆豆腐(概率)

description 我手上有n nn枚硬幣,第i ii枚正面朝上的概率是p ip i pi 我現在每個硬幣各拋一次,正面朝上看做1 11,背面朝上看做0 00,把所有硬幣得到的數異或起來決定最後得到的數。問 有多少個子集合使得0 00和1 11的概率相等?input 輸入的第一行包含乙個整數t ...

Newcoder 128 C 尋寶(樹形DP)

description 由依是戰線佯攻部隊的輔助人員,在岩澤消失之後,企圖代替岩澤成為gdm gdmgd m主唱。但是sss sssss s戰線的領袖仲村由理是不會輕易讓她加入的,於是由理子給了由依一項艱鉅的任務 去乙個地下迷宮尋找寶石 這個迷宮由n nn個房間組成,編號為0 00到n 1 n 1n...