BZOJ 3028 食物 (生成函数+数学题)
题面:BZOJ传送门
题目让我们求这些物品在合法范围内任意组合,一共组合出$n$个物品的方案数
考虑把每种食物都用生成函数表示出来,然后用多项式乘法把它们乘起来,第$n$项的系数就是方案数
汉堡:$1+x^{2}+x^{4}+x^{4}...=\frac{1}{1-x^{2}}$
可乐:$1+x$
鸡腿:$1+x+x^{2}$
蜜桃:$x+x^{3}+x^{5}+x^{7}...=\frac{x}{1-x^{2}}$
鸡块:$1+x^{4}+x^{8}+x^{12}..=\frac{1}{1-x^{3}}$
包子:$1+x+x^{2}+x^{3}=(1+x)(1+x^{2})$
土豆:$1+x$
面包:$1+x^{3}+x^{6}+x^{9}...=\frac{1}{1-x^{3}}$
数据范围非常大,直接上生成函数会炸,而且模数也不支持$NTT$
把这些多项式乘起来,化简可得$f(x)=\frac{x}{(1-x)^{4}}$
一种做法是求导,再代入泰勒展开,然而我太弱了并没有推明白式子
$f(x)=\frac{x}{(1-x)^{4}}=x(\frac{1}{(1-x)})^{4}$
考虑$\frac{1}{1-x}$的本质,就是$1+x+x^{2}+x^{3}...$
而它的四次方就是$1+4x+10x^{2}+20x^{3}..$
即$C_{3}^{0}+C_{4}^{1}x+C_{5}^{2}x^{2}+C_{6}^{3}x^{3}...$
这不就是个躺着的杨辉三角么,那么第$n$项的结果就是$C_{n+3}^{n}$
然而还有一项$x$没算进去,相当于把整个多项式右移一位,即答案左移一位
最终答案变成了$C_{n+2}^{n-1}$
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
#define dd double
#define N1 1010
using namespace std; const int mod=; int gint()
{
int ret=,fh=; char c=getchar();
while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
while(c>=''&&c<=''){ret=ret*+c-'';c=getchar();}
return ret*fh;
} void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b){ x=; y=; return; }
exgcd(b,a%b,x,y); ll t=x; x=y; y=t-a/b*y;
}
char str[N1];
int a[N1],n; int main()
{
scanf("%s",str+);
int ret=,i; n=strlen(str+);
for(i=;i<=n;i++) ret=(ret*+str[i]-'')%mod;
ll inv,invy; ret=1ll*(ret+)*(ret+)%mod*(ret)%mod;
exgcd(,mod,inv,invy); inv=(inv%mod+mod)%mod; ret=1ll*ret*inv%mod;
exgcd(,mod,inv,invy); inv=(inv%mod+mod)%mod; ret=1ll*ret*inv%mod;
printf("%d\n",ret);
return ;
}
BZOJ 3028 食物 (生成函数+数学题)的更多相关文章
- BZOJ 3028: 食物 [生成函数 隔板法 | 广义二项式定理]
3028: 食物 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 497 Solved: 331[Submit][Status][Discuss] De ...
- 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: 食物 生成函数_麦克劳林展开
不管怎么求似乎都不太好求,我们试试生成函数.这个东西好神奇.生成函数的精华是两个生成函数相乘,对应 $x^{i}$ 前的系数表示取 $i$ 个时的方案数. 有时候,我们会将函数按等比数列求和公式进行压 ...
- bzoj 3028: 食物 -- 母函数
3028: 食物 Time Limit: 3 Sec Memory Limit: 128 MB Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他 ...
- 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: 食物
\(\color{#0066ff}{ 题目描述 }\) 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应 该带一些什么东西.理所当然的,你当然要帮 ...
随机推荐
- COGS——C610. 数对的个数
http://cogs.pro/cogs/problem/problem.php?pid=610 Description出题是一件痛苦的事情!题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B P ...
- ant整合junit自己主动化測试
一. 使用Junit进行測试 1. Java业务代码: public class HelloWorld { // 測试返回"world" public String hello() ...
- Object类方法简介二
在学了Object类前面的三个常用方法后,又遇到它的另外三个方法——clone().finalize().getClass(),这三个方法不经常使用,但因为在学习过程遇到了,就简单的对它们的使用做一个 ...
- 自己定义隐式转换和显式转换c#简单样例
自己定义隐式转换和显式转换c#简单样例 (出自朱朱家园http://blog.csdn.net/zhgl7688) 样例:对用户user中,usernamefirst name和last name进行 ...
- 圆角矩形“RoundRectShape”使用详解
圆角矩形 常用作一些组件的背景 构造函数: RoundRectShape(float[] outerRadii, RectF inset, float[] innerRadii) Specifies ...
- 扩展函数之 IsWhat 简单好用
代码实现: /***扩展函数名细***/ //[IsInRange] ; //以前写法 & num < ) { } //现在写法 , )) { } //datetime类型也支持 //[ ...
- Nginx调优实战
Nginx配置文件性能微调 全局的配置 user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofi ...
- hihoCoder-1839 榶榶榶 数学
题面 题意:给你一个500000长度的数字,然后环形的让每位做头,例如123,就有123,231,312三个,然后问这n个数字的和S,S的最小非1因子是多少 题解:每个数字在每个位置都会有一次,如果说 ...
- RabbitMQ消息队列服务
MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 一个软件它 ...
- Vue2.0框架搭建基础操作及目录说明
一.概述 vue.js是一套构建用户界面的渐进式框架.vue采用自底向上增量开发的设计.vue的核心库只关心视图层,非常容易学习,非常容易与其它库和已有项目整合.vue完全有能力驱动采用单文件组件和v ...