【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)
【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)
题面
题解
显然交亵渎的次数是\(m+1\)。
那么这题的本质就是让你求\(\sum_{i=1}^n i^{m+1}\),中间再减掉几项直接暴力就行了。
所以只要考虑求这个东西。
比如说斯特林数?
\]
那么
\sum_{i=1}^n i^m&=\sum_{i=1}^n\sum_{j=0}^m {i\choose j}j!\begin{Bmatrix}m\\j\end{Bmatrix}\\
&=\sum_{j=0}^m j!\begin{Bmatrix}m\\j\end{Bmatrix}\sum_{i=1}^n{i\choose j}\\
&=\sum_{j=0}^m j!\begin{Bmatrix}m\\j\end{Bmatrix}{n+1\choose j+1}\\
&=\sum_{j=0}^m \begin{Bmatrix}m\\j\end{Bmatrix}\frac{(n+1)^{\underline {j+1}}}{j+1}
\end{aligned}\]
这样子可以做到\(O(m^2)\)。
斯特林数直接\(O(m^2)\)暴力预处理即可。
讲个笑话,这题我long long都没开就过了。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MOD 1000000007
#define ll long long
inline ll read()
{
ll x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
int S[60][60];
int Calc(int n,int m)
{
int ret=0;n+=1;
for(int j=0;j<=m;++j)
{
int s=1;for(int k=0;k<=j;++k)s=1ll*s*(n-k+MOD)%MOD;
ret=(ret+1ll*S[m][j]*s%MOD*fpow(j+1,MOD-2))%MOD;
}
return ret;
}
ll n,a[55];int m;
int main()
{
S[0][0]=1;
for(int i=1;i<=55;++i)
for(int j=1;j<=i;++j)
S[i][j]=(1ll*S[i-1][j]*j+S[i-1][j-1])%MOD;
int T=read();
while(T--)
{
n=read();m=read();for(int i=1;i<=m;++i)a[i]=read();
sort(&a[1],&a[m+1]);int ans=0;
for(int i=0;i<=m;++i)
{
ans=(ans+Calc((n-a[i])%MOD,m+1))%MOD;
for(int j=i+1;j<=m;++j)ans=(ans+MOD-fpow((a[j]-a[i])%MOD,m+1))%MOD;
}
printf("%d\n",ans);
}
return 0;
}
【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)的更多相关文章
- [BZOJ5339] [TJOI2018]教科书般的亵渎
题目链接 BZOJ题面. 洛谷题面. Solution 随便推一推,可以发现瓶颈在求\(\sum_{i=1}^n i^k\),关于这个可以看看拉格朗日插值法. 复杂度\(O(Tm^2)\). #inc ...
- 洛谷 P4593 [TJOI2018]教科书般的亵渎
洛谷 P4593 [TJOI2018]教科书般的亵渎 神仙伯努利数...网上一堆关于伯努利数的东西但是没有证明,所以只好记结论了? 题目本质要求\(\sum_{i=1}^{n}i^k\) 伯努利数,\ ...
- 【bzoj5339】[TJOI2018]教科书般的亵渎(拉格朗日插值/第二类斯特林数)
传送门 题意: 一开始有很多怪兽,每个怪兽的血量在\(1\)到\(n\)之间且各不相同,\(n\leq 10^{13}\). 然后有\(m\)种没有出现的血量,\(m\leq 50\). 现在有个人可 ...
- Luogu P4593 [TJOI2018]教科书般的亵渎
亵渎终于离开标准了,然而铺场快攻也变少了 给一个大力枚举(无任何性质)+艹出自然数幂和的方法,但是复杂度极限是\(O(k^4)\)的,不过跑的好快233 首先简单数学分析可以得出\(k=m+1\),因 ...
- BZOJ5339:[TJOI2018]教科书般的亵渎——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5339 https://www.luogu.org/problemnew/show/P4593 小豆 ...
- 并不对劲的复健训练-bzoj5339:loj2578:p4593:[TJOI2018]教科书般的亵渎
题目大意 题目链接 题解 先将\(a\)排序. \(k\)看上去等于怪的血量连续段的个数,但是要注意当存在\(a_i+1=a_{i+1}\)时,虽然它们之间的连续段为空,但是还要算上:而当\(a_m= ...
- BZOJ.5339.[TJOI2018]教科书般的亵渎(拉格朗日插值) & 拉格朗日插值学习笔记
BZOJ 洛谷 题意的一点说明: \(k\)次方这个\(k\)是固定的,也就是最初需要多少张亵渎,每次不会改变: 因某个怪物死亡引发的亵渎不会计分. 不难发现当前所需的张数是空格数+1,即\(m+1\ ...
- [TJOI2018]教科书般的亵渎
嘟嘟嘟 题面挺迷的,拿第一个样例说一下: 放第一次亵渎,对答案产生了\(\sum_{i = 1} ^ {10} i ^ {m + 1} - 5 ^ {m + 1}\)的贡献,第二次亵渎产生了\(\su ...
- P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)
传送门 首先所有亵渎的张数\(k=m+1\),我们考虑每一次使用亵渎,都是一堆\(i^k\)之和减去那几个没有出现过的\(j^k\),对于没有出现过的我们可以直接快速幂处理并减去,所以现在的问题就是如 ...
随机推荐
- Go Web --- 创建一个Article的增删改查
掌握数据的增删改查之后,就可以做一些小demo,巩固一下基础,让语法更加熟练,所以下面是按照Go web编程里面的文章管理操作,写的一个代码: package main import ( " ...
- 如何在 Linux 中查找最大的 10 个文件
https://linux.cn/article-9495-1.html
- VMware虚拟机中常见的问题汇总
在使用虚拟机进行开发工作的时候,经常会遇到各种各样的问题, 总结再次, 防微杜渐 1. wget: unable to resolve host address的解决方法 原因分析: DNS域名解析的 ...
- Windows10 等 administrator 打开IE 或者edge的方法
gpedit.msc 组策略处理即可
- 【学亮IT手记】利用字节流复制图片
- Hbase存储流程
- Django--CRM--QueryDict, 模糊搜索, 加行级锁
一 . QueryDict的修改 # QueryDict正常是不允许修改的,要想往里面添加内容,需要另mutable=True dic = request.GET print(dic) # <Q ...
- js auto hover button & html5 button autofocus
js auto hover button & html5 button autofocus input // html 5 <input name="myinput" ...
- 莫烦keras学习自修第二天【backend配置】
keras的backend包括tensorflow和theano,tensorflow只能在macos和linux上运行,theano可以在windows,macos及linux上运行 1. 使用配置 ...
- falsk sqlalchemy 自关联创建评论回复数据库
本项目在于创建类似微信上的评论回复功能的数据库 基类: from app import db from datetime import datetime class Basemadel(object) ...