题面

EntropyIncreaser 是组合计数大师。

EntropyIncreaser 很喜欢玩麦块。当然,EntropyIncreaser 拥有非同常人的超能力,他玩的是MOD版的 n 维麦块,换成数学语言也就是

Z

n

\mathbb{Z}^n

Zn 空间。他现在手里有一个特制的

T

N

T

\tt TNT

TNT方块:若将它放在

(

x

1

,

x

2

,

,

x

n

)

(x_1,x_2,…,x_n)

(x1​,x2​,…,xn​)(注意

x

i

x_i

xi​ 可能为负数)处,它将拥有

i

=

1

n

x

i

∑_{i=1}^n|x_i|

∑i=1n​∣xi​∣ 的威力值。EntropyIncreaser 只是想看看这种特制

T

N

T

\tt TNT

TNT的爆炸场面,他并不希望对其他东西造成太大的损害,所以这个

T

N

T

\tt TNT

TNT方块的威力值必须

p

⩽p

⩽p 。

EntropyIncreaser 想请你告诉他,一共有多少不同的位置放置

T

N

T

\tt TNT

TNT,使其满足他的要求。答案对

1

0

9

+

7

10^9+7

109+7 取模。

EntropyIncreaser 想了一秒就知道了答案。但他决定还是考考你。

Sample Input

3 5

Sample Output

231

题解

决定了!就用生成函数表达对这道题的尊敬!

其实这道题是可以当作生成函数入门训练题的。

我们对每一维坐标的绝对值进行考虑,若

x

i

0

|x_i|\not=0

∣xi​∣​=0 那么有正负两种情况,贡献为 2,若为 0,则只有一种情况,贡献为 1 。

因此,单个维度贡献的生成函数就是

f

(

x

)

=

1

+

2

x

+

2

x

2

+

.

.

.

=

2

x

1

1

f(x)=1+2x+2x^2+...=\frac{2}{x-1}-1

f(x)=1+2x+2x2+...=x−12​−1

继续推下去吧! 我们可以得到总答案关于威力值的生成函数

F

(

x

)

=

f

n

(

x

)

=

(

2

x

1

1

)

n

F(x)=f^n(x)=\left(\frac{2}{x-1}-1\right)^n

F(x)=fn(x)=(x−12​−1)n

用二项式定理:

F

(

x

)

=

(

2

x

1

1

)

n

=

i

=

0

n

(

1

x

1

)

i

2

i

(

1

)

n

i

C

(

n

,

i

)

=

i

=

0

n

(

1

+

x

+

x

2

+

.

.

.

)

i

2

i

(

1

)

n

i

C

(

n

,

i

)

F(x)=\left(\frac{2}{x-1}-1\right)^n=\sum_{i=0}^{n}\left(\frac{1}{x-1}\right)^i2^i(-1)^{n-i}C(n,i)\\ =\sum_{i=0}^{n}(1+x+x^2+...)^i2^i(-1)^{n-i}C(n,i)

F(x)=(x−12​−1)n=i=0∑n​(x−11​)i2i(−1)n−iC(n,i)=i=0∑n​(1+x+x2+...)i2i(−1)n−iC(n,i)

那么用隔板法可以得出,它的第

q

q

q 项就是

[

[

q

]

]

f

(

x

)

n

=

i

=

0

n

C

(

q

+

i

1

,

i

1

)

2

i

(

1

)

n

i

C

(

n

,

i

)

[[q]]f(x)^n=\sum_{i=0}^{n}C(q+i-1,i-1)2^i(-1)^{n-i}C(n,i)

[[q]]f(x)n=i=0∑n​C(q+i−1,i−1)2i(−1)n−iC(n,i)

我们要找的答案即

q

=

0

p

[

[

q

]

]

f

(

x

)

n

=

i

=

0

n

(

q

=

0

p

C

(

q

+

i

1

,

i

1

)

)

2

i

(

1

)

n

i

C

(

n

,

i

)

=

i

=

0

n

C

(

p

+

i

,

i

)

2

i

(

1

)

n

i

C

(

n

,

i

)

\sum_{q=0}^{p}[[q]]f(x)^n=\sum_{i=0}^{n}\left(\sum_{q=0}^{p}C(q+i-1,i-1)\right)2^i(-1)^{n-i}C(n,i)\\ =\sum_{i=0}^{n}C(p+i,i)2^i(-1)^{n-i}C(n,i)

q=0∑p​[[q]]f(x)n=i=0∑n​(q=0∑p​C(q+i−1,i−1))2i(−1)n−iC(n,i)=i=0∑n​C(p+i,i)2i(−1)n−iC(n,i)

成了!接下来只需要预处理阶乘求组合数,时间复杂度

O

(

n

)

O(n)

O(n) 。

CODE

#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 3000005
#define ENDL putchar('\n')
#define LL long long
#define DB double
#define lowbit(x) ((-x) & (x))
LL read() {
LL f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f * x;
}
const int MOD = 1000000007;
int n,m,i,j,s,o,k;
int fac[MAXN],inv[MAXN],invf[MAXN];
int qkpow(int a,int b) {
int res = 1;
while(b > 0) {
if(b & 1) res = res *1ll* a % MOD;
a = a *1ll* a % MOD; b >>= 1;
}return res;
}
int C(int n,int m) {
if(m < 0 || m > n) return 0;
return fac[n] *1ll* invf[n-m] % MOD *1ll* invf[m] % MOD;
}
int main() {
fac[0]=fac[1]=inv[0]=inv[1]=invf[0]=invf[1]=1;
for(int i = 2;i <= 3000000;i ++) {
fac[i] = fac[i-1]*1ll*i % MOD;
inv[i] = (MOD-inv[MOD%i]) *1ll* (MOD/i) % MOD;
invf[i] = invf[i-1] *1ll* inv[i] % MOD;
}
n = read();m = read();
int ans = 0,po2 = 1;
for(int i = 0;i <= n;i ++) {
(ans += C(m+i,i)*1ll*po2 % MOD * (((n-i)&1) ? (MOD-1ll):1ll) % MOD *1ll* C(n,i) % MOD) %= MOD;
(po2 += po2) %= MOD;
}
printf("%d\n",ans);
return 0;
}

LOJ6671 EntropyIncreaser 与 Minecraft (生成函数)的更多相关文章

  1. 【LOJ6671】EntropyIncreaser 与 Minecraft

    Orz lbt Description https://loj.ac/problem/6671 Solution

  2. hdu 5279 YJC plays Minecraft——生成函数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5279 令 n 个点的树的 EGF 是 g(x) ,则 \( g(x) = \sum\limits_{i=0 ...

  3. FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅲ

    第三波,走起~~ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ 单位根反演 今天打多校时 1002 被卡科技了 ...

  4. MineCraft note

    客户端:http://pan.baidu.com/s/1hqgS8sshttp://pan.baidu.com/s/1mgmkduC 材质包:R3D小地图MODCraftGuide mod 内置合成表 ...

  5. [CodeForces - 712D]Memory and Scores (DP 或者 生成函数)

    题目大意: 两个人玩取数游戏,第一个人分数一开始是a,第二个分数一开始是b,接下来t轮,每轮两人都选择一个[-k,k]范围内的整数,加到自己的分数里,求有多少种情况使得t轮结束后a的分数比b高.  ( ...

  6. Ubuntu上安装Minecraft服务器

    Minecraft由于其独特的魅力吸引了很多玩家.不过游戏的乐趣只有在和朋友一起玩的时候才最有意思,所以很早以前我就想建设自己的服务器.但由于专业知识欠缺,没有实现. 最近接触了Linux服务器,所以 ...

  7. HDU 1171 Big Event in HDU --暴力+生成函数

    题意:给n种房子,每种房子有一个值val和个数cnt,现在要把这些房子分成两部分,争取两部分总值相等,如果不能相等,让A>B,且A-B最小. 解法:先跑一次生成函数,c[n]表示组成总值为n的方 ...

  8. HDU 2189 悼念512汶川大地震遇难同胞――来生一起走 --生成函数

    这题跟上两题也差不多. 把150以内的素数找出来,把素数的值看做硬币的面值,每个硬币的个数即ceil(150/prime[i]),因为再多也没用,最多组成n=150就行了,所以又回到了找硬币问题.用生 ...

  9. HDU 1085 Holding Bin-Laden Captive --生成函数第一题

    生成函数题. 题意:有币值1,2,5的硬币若干,问你最小的不能组成的币值为多少. 解法:写出生成函数: 然后求每项的系数即可. 因为三种硬币最多1000枚,1*1000+2*1000+5*1000=8 ...

随机推荐

  1. CabloyJS的微信API对接模块:当前支持微信公众号和微信小程序

    Cabloy-微信是什么 Cabloy-微信是基于CabloyJS全栈业务开发框架开发的微信接口模块,当前整合了微信公众号和微信小程序的接口,达到开箱即用的使用效果.在Cabloy-微信的基础上,可以 ...

  2. python实现对简单的运算型验证码的识别【不使用OpenCV】

    最近在写我们学校的教务系统的手机版,在前端用户执行绑定操作后,服务器将执行登录,但在登录过程中,教务系统中有个运算型的验证码,大致是这个样子的: 下面我们开始实现这个验证码的识别. 1.图片读取 从网 ...

  3. .net core 抛异常对性能影响的求证之路

    一.前言 在.net 社区中曾经听到过很多关于大量抛异常会影响性能这样的结论,心中一直就存在各种疑问.项目中使用自定义异常来处理业务很爽,但是又担心大量抛业务异常存在性能问题. 查阅了各种文档,微软官 ...

  4. .NET 处理[未能为 SSLTLS 安全通道建立信任关系]问题

    更新记录 2022年4月16日本文迁移自Panda666原博客,原发布时间:2021年7月16日. 在.NET的开发过程中,发现[基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系]问题 ...

  5. 使用Playbook批量部署多台LAMP环境

    1. 安装ansible yum install epel-release -y yum install ansible -y Playbook是一个不同于使用ansible命令行执行方式的模式,功能 ...

  6. 详解HashMap源码解析(下)

    上文详解HashMap源码解析(上)介绍了HashMap整体介绍了一下数据结构,主要属性字段,获取数组的索引下标,以及几个构造方法.本文重点讲解元素的添加.查找.扩容等主要方法. 添加元素 put(K ...

  7. 关于cpu体系架构的一些有趣的故事分享

    从排查一次匪夷所思的coredump,引出各种体系架构的差异. 本文中的所有内容来自学习DCC888的学习笔记或者自己理解的整理,如需转载请注明出处.周荣华@燧原科技 1 背景 从全世界有记载的第一台 ...

  8. 记一道经典树上Nim游戏

    这道题首先是 Hanriver 提出来的,但是大家都不会做,今天看到了一道一模一样的题目 AT2667 题目大意是,每个人删掉一个不是整棵树的原树的子树,给定一个树问游戏状态. 首先,这是需要用到多个 ...

  9. 解决Windows10、Windows11文件名无法大写的问题

    问题描述: 同一目录下的不同文件有些可以用大写字母做文件名,有些输入大写字母完成后自动变成小写. 甚至同一文件的文件名中的相同字母也会有这种情况,例如:文件名为"bu人BU"的文件 ...

  10. Nginx常用命令之启动与重启

    1.测试新的Nginx程序是否正确 [test@P-SH-Nginx-01 nginx]$ ./sbin/nginx -t nginx: the configuration file /usr/loc ...