国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

BZOJ 3028 食物

2019-11-06 06:01:46
字體:
來源:轉載
供稿:網友

Description

明明這次又要出去旅游了,和上次不同的是,他這次要去宇宙探險!我們暫且不討論他有多么NC,他又幻想了他應該帶一些什么東西。理所當然的,你當然要幫他計算攜帶N件物品的方案數。他這次又準備帶一些受歡迎的食物,如:蜜桃多啦,雞塊啦,承德漢堡等等當然,他又有一些稀奇古怪的限制:每種食物的限制如下:       承德漢堡:偶數個       可樂:0個或1個            雞腿:0個,1個或2個            蜜桃多:奇數個            雞塊:4的倍數個            包子:0個,1個,2個或3個       土豆片炒肉:不超過一個。            面包:3的倍數個   注意,這里我們懶得考慮明明對于帶的食物該怎么搭配著吃,也認為每種食物都是以‘個’為單位(反正是幻想嘛),只要總數加起來是N就算一種方案。因此,對于給出的N,你需要計算出方案數,并對10007取模。 

Input

輸入樣例1  1輸出樣例1  1 輸入樣例2  5輸出樣例2  35 數據范圍   對于40%的數據,1<=N<=100000;   對于所有數據,1<=n<=10^500; 

Output

Sample Input

Sample Output

HINT

Source

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

生成函數+逆元~

生成函數ax^b表示取b種該食物有a種方案,不同生成函數之間相乘,最終得到的函數中x^(i-1)的系數就是總共取i樣的方案數。

承德漢堡:1/(1-x^2)

可樂:1+x

雞腿:1+x+x^2

蜜桃多:x/(1-x^2)

雞塊:1/(1-x^4)

包子:1+x+x^2+x^3

土豆片炒肉:1+x

面包:1/(1-x^3)=1/(1-x)/(x^2+x+1)

把它們全部乘起來得到:x/(1-x)^4,即為x*(1-x)^(-4)

(注意1+x+x^2+x^3是(1+x)(x^2+1)不是(1+x)x^2--)

這個式子的第n-1項是x*C(n+2,n-1)*x^(n-1),

所以最終答案就是C(n+2,n-1)=C(n+2,3)。

n很大,每輸入一位都取模再*10化簡,至于組合數,直接拆開求逆元計算就好了,6的逆元求出來是1668,程序附在后面~

#include<cstdio>#include<cstring>#define modd 10007int n,x;char s[501];int main(){	scanf("%s",s);x=strlen(s);	for(int i=0;i<x;i++) n=((n*10%modd)+s[i]-'0')%modd;	PRintf("%d/n",((n*(n+1)%modd)*(n+2)%modd)*1668%modd);	return 0;}

求逆元:

#include<cstdio>#include<cstring>#define modd 10007int n,x;char s[501];int mi(int u,int v){	int k=1;	while(v)	{		if(v&1) k=(k*u)%modd;		u=(u*u)%modd;v>>=1;	}	return k;}int main(){	printf("%d/n",mi(6,modd-2));	return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卓资县| 宣威市| 厦门市| 大安市| 禹城市| 桃园市| 米林县| 璧山县| 安仁县| 阳城县| 晋宁县| 信丰县| 万源市| 建宁县| 鹤峰县| 澄迈县| 秭归县| 郯城县| 徐州市| 天镇县| 额敏县| 客服| 鄂州市| 天等县| 塔城市| 平度市| 含山县| 台北市| 富蕴县| 芜湖市| 宾川县| 木兰县| 通山县| 怀远县| 卓尼县| 维西| 嘉义市| 莱州市| 蚌埠市| 荆门市| 南康市|