Description

WYF有一个精致的k维立方体盒子(2维为正方形,3维为正方体,以此类推)。这个盒子的边长为n,里面有一个边长为n-1的盒子,边长为n-1的盒子里面还有一个边长为n-2的盒子……最里面的盒子边长为m。现在WYF想知道这n-m+1个盒子的k维体积和模p的余数。

Input

输入共一行包含4个正整数k, n, m, p。

Output

输出共一行包含1个正整数,表示n-m+1个盒子的k维体积之和模p的余数。

Sample Input

输入1:4 2 2 97

输入2:1 100 1 10007 

Sample Output

输出1:16【样例说明】边长为2的4维立方体的4维体积为16。

输出25050

Data Constraint

题解

  • 这道题显然就是要求
  • 我们先考虑一下若何求一个i^k,对于第二类斯特林数我们知道Si,j表示为把i个有区别的球放入j个无区别的盒子的方案数(不存在空盒)
  • 显然i^k也可以理解为将i个不同的盒子放入k个不同的球的方案数(允许空盒)
  • 现在把允许空盒转换为每个盒子至少放一个球的方案数,对于存在k-j空盒的方案数就是 S[k][j]*C(i,j)*j!
  • 这样的话我们就可以得出
  • 已知,
  • 所以,
  • 最后的话,这个东西怎么求呢,可以预处理斯特林数,再加个快速幂和防爆longlong的奇技淫巧就好了

代码

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #define ll long long
 5 #define N 2010
 6 using namespace std;
 7 ll k,n,m,p,ans,s[N][N];
 8 ll mul(ll x,ll y)
 9 {
10     ll l=1e6,a1=x/l,a2=x%l,b1=y/l,b2=y%l;
11     return (a1*b1%p*l%p*l%p+a1*b2%p*l%p+b1*a2%p*l%p+a2*b2%p)%p;
12 }
13 ll ksm(ll a,ll b)
14 {
15     ll r=1;
16     for (;b;b>>=1,a=mul(a,a)) if (b&1) r=mul(r,a);
17     return r;
18 }
19 ll calc(ll n)
20 {
21     ll ans=0;
22     for (ll i=0;i<=k;i++)
23     {
24         ll r=s[k][i];
25         for (ll j=n+1;j>=n+1-i;j--) r=mul(r,(j%(i+1)==0)?j/(i+1):j);
26         ans=(ans+r)%p;
27     }
28     return ans;
29 }
30 int main()
31 {
32     scanf("%lld%lld%lld%lld",&k,&n,&m,&p),s[0][0]=1;
33     if (k>2000)
34     {
35         for (ll i=m;i<=n;i++) ans=(ans+ksm(i,k))%p;
36         printf("%lld",ans); return 0;
37     }
38     for (ll i=1;i<=k;i++) for (ll j=1;j<=i;j++) s[i][j]=(s[i-1][j-1]+j*s[i-1][j]%p+p)%p;
39     printf("%lld",(calc(n)-calc(m-1)+p)%p);
40 }

转载于:https://www.cnblogs.com/Comfortable/p/10327782.html

[斯特林数][自然数幂和] Jzoj P4220 WYF的盒子相关推荐

  1. [斯特林数][自然数幂和]JZOJ 4220 WYF的盒子

    Description WYF有一个精致的k维立方体盒子(2维为正方形,3维为正方体,以此类推).这个盒子的边长为n,里面有一个边长为n-1的盒子,边长为n-1的盒子里面还有一个边长为n-2的盒子-- ...

  2. 通俗易懂的斯特林数介绍

    通俗易懂的斯特林数介绍 定义 第一类斯特林数 第二类斯特林数 性质 通项 递推 第一类斯特林数 第二类斯特林数 特殊值 第一类斯特林数 第二类斯特林数 快速幂??? 斯特林反演 定义 第一类斯特林数 ...

  3. BZOJ5093 图的价值(NTT+斯特林数)

    显然每个点会提供相同的贡献.于是现在只考虑1号点的贡献.若其度数为i,则在2~n号点选i个连上,剩下的边随便连,这样可以算出答案为 这个式子可以O(n)计算.发现k比较小,于是考虑如何将这个式子化为与 ...

  4. 自然数幂和 斯特林数

    2018 UPD: 其实第二类斯特林数做自然数幂和更简单,这里简单写一下: 由一个基本式子出发 nk=∑i=0k{k i}[n]i n^k=\sum_{i=0}^k\big\{^k_{\ i}\big ...

  5. 第二类斯特林数与自然数幂和

    一般求法 一般求自然数幂和都会用到拉格朗日插值法,但仅当存在逆元的时候能用,给出一种用第二类斯特林数求自然数幂和的方法,时间复杂度是O(k2)O(k2)O(k^2)而不是O(k log k)O(klo ...

  6. 【BJOI2019】勘破神机(下降幂转自然幂)(第一类斯特林数)(特征方程)

    传送门 题解: 完全自己推出来的第一道数学神题. 首先我们知道宽度为222的部分方案数是斐波那契数列. 设fnf_nfn​表示长度为nnn的时候方案数,题目要求的实际上是这个东西: ∑n=lr(fnk ...

  7. 【jzoj4220】【五校联考2day2】【WYF的盒子】【自然数幂和】

    题目大意 WYF有一个精致的k维立方体盒子(2维为正方形,3维为正方体,以此类推).这个盒子的边长为n,里面有一个边长为n-1的盒子,边长为n-1的盒子里面还有一个边长为n-2的盒子--最里面的盒子边 ...

  8. 【学习笔记】自然数幂和

    温馨提示: 本文文档大小约\(11KB\). 引入 自然数幂和是一个我们从小就耳熟能详的经典问题.定义\(S(n,k)=\sum^{n}_{i=0} i^k\), 显然\(S(n,k)\)为关于\(n ...

  9. 51nod 1847 奇怪的数学题(数论/min25筛/杜教筛/斯特林数)

    51nod 1847 奇怪的数学题 求解∑i=1n∑j=1nsgcd(i,j),sgcd\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j),sgcd∑i=1n​∑j=1n​sgcd(i ...

最新文章

  1. ubuntu wps
  2. 牛逼!Python的判断、循环和各种表达式(长文系列第②篇)
  3. EA(Enterprise Architect)UML修改字体大小
  4. win下 cmd 查询本机开了哪些端口 并查看开启端口的软件
  5. jzoj4817-square【区间RMQ,二分答案】
  6. 保存图片验证码到redis数据库
  7. Python——LOL官方商城皮肤信息爬取(一次练手)
  8. PhpStorm调用浏览器运行php文件
  9. 使用freemarker模板生成word文档
  10. VC++多线程工作笔记0002---线程的运行状态
  11. 深入浅出LVM on linux
  12. 4.Unix工作环境
  13. wdlinux LAMP
  14. sql连接查询语句中on、where筛选的区别总结
  15. vba字典重复key_VBA字典数据重复次数
  16. 成都-峨眉山(乐山)旅游攻略
  17. Massive MIMO简介
  18. [Chatter] 错误处理的安全保证等级
  19. ICESat2学习笔记5 :ICESat-2数据下载
  20. 线性代数拾遗(2)—— 何时用初等行变换,何时用初等列变换?

热门文章

  1. 武汉python自动化测试招聘,python自动化测试工程师招聘_Python-自动化测试面试
  2. 泛生子Q3财报解析:癌症基因检测行业已呈现“燎原之势”
  3. javascript BOM与DOM介绍
  4. .net html5页面缓存技术,.net缓存技术详解
  5. 项目实训 - 智能车系统 - 第七周记录
  6. python底层与机器底层关系_由Python历史「解密」Python底层逻辑
  7. 删除除了id号不同,其他都相同的学生冗余信息
  8. 无线信道信道衰落知识点总结
  9. 经典书籍《On Java》
  10. 在Python里通过Pandas和pymysql库批量修改MySQL数据库的字段名称和字段类型