BZOJ 3028: 食物
\(\color{#0066ff}{ 题目描述 }\)
明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应
该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。他这次又准备带一些受欢迎的食物,
如:蜜桃多啦,鸡块啦,承德汉堡等等当然,他又有一些稀奇古怪的限制:每种食物的限制如下:
承德汉堡:偶数个
可乐:0个或1个
鸡腿:0个,1个或2个
蜜桃多:奇数个
鸡块:4的倍数个
包子:0个,1个,2个或3个
土豆片炒肉:不超过一个。
面包:3的倍数个
注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛
),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。
\(\color{#0066ff}{输入格式}\)
输入一个数字N,1<=n<=\(10^{500}\)
\(\color{#0066ff}{输出格式}\)
如题
\(\color{#0066ff}{输入样例}\)
1
5
\(\color{#0066ff}{输出样例}\)
1
35
\(\color{#0066ff}{数据范围与提示}\)
none
\(\color{#0066ff}{ 题解 }\)
生成函数
\(ans = (x^0+x^2+x^4+x^6...)*(x^0+x^1)*(x^0+x^1+x^2)*(x^1+x^3+x^5...)*(x^0+x^4+x^8...)*(x^0+x^1+x^2+x^3)*(x^0+x^1)*(x^0+x^3+x^6...)\)的第n项系数
因为有\(x^0+x^1+x^2+x^3+...=\frac{1}{1-x}\)
所以原式为\(ans = (\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})\)
还有一些项可以等比数列求和
\(ans = \frac{1}{1-x^2}*\frac{1-x^2}{1-x}*\frac{1-x^3}{1-x}*\frac{x}{1-x^2}*\frac{1}{1-x^4}*\frac{1-x^4}{1-x}*\frac{1-x^2}{1-x}*\frac{1}{1-x^3}\)
大力约分
\(ans = \frac{x}{(1-x^4)}\)的n次方项系数
这个怎么搞呢?
因为\(\begin{aligned}\frac{1}{(1-x)^{n + 1}}=\sum_{i\ge 0}C_{n+i}^i x^i\end{aligned}\)
因此可以化为\(ans=x*\begin{aligned}\sum_{i\ge 0}C_{3+i}^i x^i\end{aligned}\)
把x弄进去\(ans=\begin{aligned}\sum_{i\ge 0}C_{3+i}^i x^{i +1}\end{aligned}\)
改变一下i的枚举\(ans=\begin{aligned}\sum_{i\ge 1}C_{2+i}^{i - 1} x^{i}\end{aligned}\)
则$ans=\begin{aligned}\sum_{i\ge 1}C_{2+i}^{i - 1} x{i}\end{aligned}的第n项系数=C_{2+n}{n - 1} =C_{2+n}^{3} $
然后就没有然后了,暴力组合数展开。。。qwq
#include<bits/stdc++.h>
#define LL long long
const int mod = 10007;
LL in() {
char ch; LL x = 0, f = 1;
while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);
for(x = ch ^ 48; isdigit(ch = getchar()); x = ((x << 1) + (x << 3) + (ch ^ 48)) % mod);
return x * f;
}
int main() {
LL n = in();
printf("%lld\n", (n * (n + 1) * (n + 2) / 6) % mod);
return 0;
}
BZOJ 3028: 食物的更多相关文章
- bzoj 3028: 食物 -- 母函数
3028: 食物 Time Limit: 3 Sec Memory Limit: 128 MB Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他 ...
- BZOJ 3028: 食物 [生成函数 隔板法 | 广义二项式定理]
3028: 食物 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 497 Solved: 331[Submit][Status][Discuss] De ...
- BZOJ 3028 食物 (生成函数+数学题)
题面:BZOJ传送门 题目让我们求这些物品在合法范围内任意组合,一共组合出$n$个物品的方案数 考虑把每种食物都用生成函数表示出来,然后用多项式乘法把它们乘起来,第$n$项的系数就是方案数 汉堡:$1 ...
- BZOJ 3028 食物 生成函数
Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应 该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数.他这 ...
- bzoj 3028 食物——生成函数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3028 把式子写出来,化一化,变成 x / ((1-x)^4) ,变成几个 sigma 相乘的 ...
- bzoj 3028 食物 —— 生成函数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3028 式子很好推,详细可以看这篇博客:https://blog.csdn.net/wu_to ...
- BZOJ 3028 食物 ——生成函数
把所有东西的生成函数搞出来. 发现结果是x*(1-x)^(-4) 然后把(1-x)^(-4)求逆,得到(1+x+x^2+...)^4 然后考虑次数为n的项前的系数,就相当于选任意四个非负整数构成n的方 ...
- bzoj 3028: 食物【生成函数】
承德汉堡:\( 1+x^2+x^4+...=\frac{1}{1-x^2} \) 可乐:\(1+x \) 鸡腿:\( 1+x+x^2=\frac{x^3-1}{x-1} \) 蜜桃多:\( x+x^3 ...
- bzoj 3028: 食物 生成函数_麦克劳林展开
不管怎么求似乎都不太好求,我们试试生成函数.这个东西好神奇.生成函数的精华是两个生成函数相乘,对应 $x^{i}$ 前的系数表示取 $i$ 个时的方案数. 有时候,我们会将函数按等比数列求和公式进行压 ...
随机推荐
- Oracle 12c 搭建学习
Oracle 12c 搭建学习 Vm workstaton10 安装linux 6.4 安装oracle12c Oracle 12c只支持64位系统 1 环境检查 [root@rac1 ~]# gre ...
- [置顶]
linux getline()函数
getline()函数是什么?百度百科这样解释: getline不是C库函数,而是C++库函数.它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束.1) ...
- iOS中的数据存储
SQLite3 SQLite3是一款开源的嵌入式关系型数据库,可移植性好,易使用,内存开销小. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中. SQLite3常用的4种 ...
- CentOS 配置XWIN/VNC
Xwin服务器 CentOS上运维Xwin,在这之前需要理清一些关系: 一, X window 包括xserver 和x client.linux下的xserver 主要有xorg.xfree86, ...
- Vue2.0+Webpack+Element+Axios+vueRouter技术栈使用过程总结
搭建项目架构 目采用Webpack+Vue-router的架构方式,开始安装(一切操作都在windows系统上完成) 1.按Win+R,然后在文本框中输入cmd,回车打开命令行,输入vue-cli安装 ...
- sql语句中的问号是干什么的???
1.实例代码一: String sql = "SELECT userid,name FROM tuser WHERE userid=? AND password=?" ; pst ...
- C语言-郝斌笔记-002病毒程序示范
病毒程序示范 /* 龌龊的程序! */ # include <stdio.h> # include <windows.h> # include <malloc.h> ...
- Apache Thrift with Java Quickstart(thrift入门及Java实例)
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl ...
- Overloaded的方法是否可以改变返回值的类型
摘要: 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同) Overload是重载的意思,Override是覆盖的意思,也就是重写. 重载 ...
- spoj14846 Bribe the Prisoners
看来我还是太菜了,这么一道破题做了那么长时间...... 传送门 分析 我首先想到的是用状压dp来转移每一个人是否放走的状态,但是发现复杂度远远不够.于是我们考虑区间dp,dpij表示i到j区间的所有 ...