国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 溆浦县| 嘉兴市| 垫江县| 河北区| 淮阳县| 响水县| 陵川县| 张掖市| 鹰潭市| 剑川县| 喀喇沁旗| 全椒县| 葵青区| 万荣县| 嵩明县| 赤壁市| 崇义县| 西畴县| 雅江县| 镇坪县| 南丹县| 章丘市| 如东县| 花垣县| 肇东市| 绥阳县| 介休市| 南充市| 葵青区| 克拉玛依市| 贵阳市| 咸丰县| 临桂县| 东阿县| 华蓥市| 乌兰浩特市| 肇东市| 灌阳县| 宜城市| 行唐县| 汉沽区|