Rockdu's Blog
“Where there is will, there is a way”
亲 您的浏览器不支持html5的audio标签
Toggle navigation
Rockdu's Blog
主页
数据结构
字符串算法
图论
数论、数学
动态规划
基础算法
[其它内容]
计算几何
科研笔记
归档
标签
BZOJ3028: 食物
? 解题记录 ?
? BZOJ ?
? 生成函数 ?
2018-03-12 20:25:15
485
0
0
rockdu
? 解题记录 ?
? BZOJ ?
? 生成函数 ?
###<font color = blue>Description</font> 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应 该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。他这次又准备带一些受欢迎的食物, 如:蜜桃多啦,鸡块啦,承德汉堡等等当然,他又有一些稀奇古怪的限制:每种食物的限制如下: 承德汉堡:偶数个 可乐:0个或1个 鸡腿:0个,1个或2个 蜜桃多:奇数个 鸡块:4的倍数个 包子:0个,1个,2个或3个 土豆片炒肉:不超过一个。 面包:3的倍数个 注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛 ),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。 ###<font color = blue>Input</font> 输入一个数字N,1<=n<=10^500 ###<font color = blue>Output</font> 如题 ###<font color = blue>Sample Input</font> 输入样例1 1 输入样例2 5 ###<font color = blue>Sample Output</font> 输出样例1 1 输出样例2 35 ###<font color = blue>HINT</font> ###<font color = blue>Source</font> 本题我们先写出所有的生成函数,并且先将无限的生成函数转换为有限形式以便于化简。关于泰勒展开可以看这一篇博客: [初始生成函数(泰勒展开)](http://blog.leanote.com/post/rockdu/TX03) 写出来的式子: $$(1 + x^2 + x^4 ...)(1 + x)(1 + x + x^2)(x^1 + x^3 + ...)(1 + x^4 + x^8 ...)(1 + x + x^2 + x^3)(1 + x)(1 + x^3 + x^6 ...)$$ $$\frac{1}{1 - x^2}(1 + x)(1 + x + x^2)\frac{x}{1 - x^2}\frac{1}{1 - x^4}(1 + x + x^2 + x^3)(1 + x)\frac{1}{1 - x^3}$$ 注意到: $$1 - x^n = (1 + x^1 + x^2 ... x^{n-1})(1 - x)$$ 我们上面的式子就成了: $$\frac{1}{{(1-x)}^4}$$ 这个函数其实就是由$\frac{1}{1-x}$所表示的$1+x+x^2+x^3...$系数做四次前缀和得到的。可以求得第i项系数为: $$\frac{n(n+1)(n+2)}{6}$$于是我们预处理6对10007的逆元就可以O(读入)做出来了 代码: ``` #include<cstdio> #include<cctype> using namespace std; const int mod = 10007; int x; void read(int & n) { n = 0;char c = getchar(); while(!isdigit(c)) c = getchar(); while(isdigit(c)) n = (n * 10 + c - '0') % mod, c = getchar(); } int main() { read(x); printf("%d", (((x * (x + 1)) % mod) * (x + 2) % mod) * 1668 % mod); return 0; } ```
上一篇:
BZOJ4974: [Lydsy八月月赛]字符串大师
下一篇:
NTT中可用素数模数原根表
0
赞
485 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册