【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)

题面

BZOJ

洛谷

题解

显然交亵渎的次数是\(m+1\)。

那么这题的本质就是让你求\(\sum_{i=1}^n i^{m+1}\),中间再减掉几项直接暴力就行了。

所以只要考虑求这个东西。

比如说斯特林数?

\[m^n=\sum_{i=0}^{n}{m\choose i}i!\begin{Bmatrix}n\\i\end{Bmatrix}
\]

那么

\[\begin{aligned}
\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]教科书般的亵渎(斯特林数)的更多相关文章

  1. [BZOJ5339] [TJOI2018]教科书般的亵渎

    题目链接 BZOJ题面. 洛谷题面. Solution 随便推一推,可以发现瓶颈在求\(\sum_{i=1}^n i^k\),关于这个可以看看拉格朗日插值法. 复杂度\(O(Tm^2)\). #inc ...

  2. 洛谷 P4593 [TJOI2018]教科书般的亵渎

    洛谷 P4593 [TJOI2018]教科书般的亵渎 神仙伯努利数...网上一堆关于伯努利数的东西但是没有证明,所以只好记结论了? 题目本质要求\(\sum_{i=1}^{n}i^k\) 伯努利数,\ ...

  3. 【bzoj5339】[TJOI2018]教科书般的亵渎(拉格朗日插值/第二类斯特林数)

    传送门 题意: 一开始有很多怪兽,每个怪兽的血量在\(1\)到\(n\)之间且各不相同,\(n\leq 10^{13}\). 然后有\(m\)种没有出现的血量,\(m\leq 50\). 现在有个人可 ...

  4. Luogu P4593 [TJOI2018]教科书般的亵渎

    亵渎终于离开标准了,然而铺场快攻也变少了 给一个大力枚举(无任何性质)+艹出自然数幂和的方法,但是复杂度极限是\(O(k^4)\)的,不过跑的好快233 首先简单数学分析可以得出\(k=m+1\),因 ...

  5. BZOJ5339:[TJOI2018]教科书般的亵渎——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5339 https://www.luogu.org/problemnew/show/P4593 小豆 ...

  6. 并不对劲的复健训练-bzoj5339:loj2578:p4593:[TJOI2018]教科书般的亵渎

    题目大意 题目链接 题解 先将\(a\)排序. \(k\)看上去等于怪的血量连续段的个数,但是要注意当存在\(a_i+1=a_{i+1}\)时,虽然它们之间的连续段为空,但是还要算上:而当\(a_m= ...

  7. BZOJ.5339.[TJOI2018]教科书般的亵渎(拉格朗日插值) & 拉格朗日插值学习笔记

    BZOJ 洛谷 题意的一点说明: \(k\)次方这个\(k\)是固定的,也就是最初需要多少张亵渎,每次不会改变: 因某个怪物死亡引发的亵渎不会计分. 不难发现当前所需的张数是空格数+1,即\(m+1\ ...

  8. [TJOI2018]教科书般的亵渎

    嘟嘟嘟 题面挺迷的,拿第一个样例说一下: 放第一次亵渎,对答案产生了\(\sum_{i = 1} ^ {10} i ^ {m + 1} - 5 ^ {m + 1}\)的贡献,第二次亵渎产生了\(\su ...

  9. P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)

    传送门 首先所有亵渎的张数\(k=m+1\),我们考虑每一次使用亵渎,都是一堆\(i^k\)之和减去那几个没有出现过的\(j^k\),对于没有出现过的我们可以直接快速幂处理并减去,所以现在的问题就是如 ...

随机推荐

  1. elk之查询方式(4种)

    es 在查询时, 可以指定搜索类型为下面四种: QUERY_THEN_FETCH QUERY_AND_FEATCH DFS_QUERY_THEN_FEATCH DFS_QUERY_AND_FEATCH ...

  2. Django 中的Form、ModelForm

    一.ModelForm 源码 class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass): pass def modelform_fact ...

  3. 在IDEA中配置Spring的XML装配

    不考虑混合模式的话,Spring有三类装配Bean的方法,自动装配和Java代码装配都会很容易上手,但在弄XML装配时遇到了问题,这与IDEA环境有关. 装配时需要在源码中配置XML文件的位置,我看别 ...

  4. 后台管理系统之邮件开发(Java实现)

    一,功能点 后台管理系统,添加用户时.对注册的新用户邮箱发送初始密码. 二,代码实现 1.Mail实体类 public class Mail { private Set<String> r ...

  5. springboot 整合spark-sql报错

    Exception in thread "main" org.spark_project.guava.util.concurrent.ExecutionError: java.la ...

  6. C# Note15:设置Window图标的正确方式

    Windows Presentation Foundation(WPF)独立应用程序有两种类型的图标: 一个程序集(assembly) 图标,通过在应用程序的项目构建文件中使用<Applicat ...

  7. 剑指offer(13)

    题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 判断当前两个根结点是否相等,如果相等,判断左右子树是否相等,如果不依次判断左右子树是否满足上 ...

  8. 剑指offer(7)

    今天的几道题目都是关于斐波那契数列的. 题目1: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 传统的方法采用递归函数,这种 ...

  9. freemarker 简单操作

    操作字符串函数 1. substring(start,end)从一个字符串中截取子串 start:截取子串开始的索引,start必须大于等于0,小于等于end end: 截取子串的长度,end必须大于 ...

  10. 生存模型(Survival Model)介绍

    https://www.cnblogs.com/BinbinChen/p/3416972.html 生存分析,维基上的解释是: 生存分析(Survival analysis)是指根据试验或调查得到的数 ...