传送门

题意:

在炉石传说中有这样的一个场面:n个随从,血量为1~n,现在去除m个随从,然后开始释放“亵渎”。每使用一张“亵渎”会获得一定的分数,分数计算如下:在使用一张“亵渎”之后,每一个被亵渎造成伤害的怪会产生 xk x k x^k的分数,其中x是造成伤害前怪的血量,k是需要杀死所有怪物所需的“亵渎”的张数。

n≤1013m≤50 n ≤ 10 13 m ≤ 50 n≤10^{13} m≤50

Solution:

可以发现这是若干个形如 Sum(n,k)=∑ni=1ik S u m ( n , k ) = ∑ i = 1 n i k Sum(n,k)=\sum_{i=1}^ni^k的式子组成的

这就是经典的自然数幂和问题了

可以用累加法:

首先有一个式子: (n+1)k−nk=∑ki=1Cik∗nk−i ( n + 1 ) k − n k = ∑ i = 1 k C k i ∗ n k − i (n+1)^k-n^k=\sum_{i=1}^kC_k^i*n^{k-i}

左边组合意义是k个球涂n+1种颜色的方案数和k个球涂n种颜色的方案数

右边组合意义是在k个球选一些球涂第n+1种颜色,其他球随便涂的方案数

然后我们可以通过上面的式子列出若干式子:

(n+1)k−nk=∑ki=1Cik∗nk−i ( n + 1 ) k − n k = ∑ i = 1 k C k i ∗ n k − i (n+1)^k-n^k=\sum_{i=1}^kC_k^i*n^{k-i}

nk−(n−1)k=∑ki=1Cik∗(n−1)k−i n k − ( n − 1 ) k = ∑ i = 1 k C k i ∗ ( n − 1 ) k − i n^k-(n-1)^k=\sum_{i=1}^kC_k^i*(n-1)^{k-i}

(n−1)k−(n−2)k=∑ki=1Cik∗(n−2)k−i ( n − 1 ) k − ( n − 2 ) k = ∑ i = 1 k C k i ∗ ( n − 2 ) k − i (n-1)^k-(n-2)^k=\sum_{i=1}^kC_k^i*(n-2)^{k-i}

... . . . ...

2k−1k=∑ki=1Cik∗1k−i 2 k − 1 k = ∑ i = 1 k C k i ∗ 1 k − i 2^k-1^k=\sum_{i=1}^kC_k^i*1^{k-i}

全都加起来可以得到: (n+1)k−1=∑ki=1Cik∗Sum(n,k−i) ( n + 1 ) k − 1 = ∑ i = 1 k C k i ∗ S u m ( n , k − i ) (n+1)^k-1=\sum_{i=1}^kC_k^i*Sum(n,k-i)

即 (n+1)k+1−1=∑k+1i=1Cik+1∗Sum(n,k−i+1) ( n + 1 ) k + 1 − 1 = ∑ i = 1 k + 1 C k + 1 i ∗ S u m ( n , k − i + 1 ) (n+1)^{k+1}-1=\sum_{i=1}^{k+1}C_{k+1}^i*Sum(n,k-i+1)

(n+1)k+1−1=∑k+1i=2Cik+1∗Sum(n,k−i+1)+(k+1)∗Sum(n,k) ( n + 1 ) k + 1 − 1 = ∑ i = 2 k + 1 C k + 1 i ∗ S u m ( n , k − i + 1 ) + ( k + 1 ) ∗ S u m ( n , k ) (n+1)^{k+1}-1=\sum_{i=2}^{k+1}C_{k+1}^i*Sum(n,k-i+1)+(k+1)*Sum(n,k)

Sum(n,k)=(n+1)k+1−1−∑k−1i=0Cik+1∗Sum(n,i)k+1 S u m ( n , k ) = ( n + 1 ) k + 1 − 1 − ∑ i = 0 k − 1 C k + 1 i ∗ S u m ( n , i ) k + 1 Sum(n,k)=\frac{(n+1)^{k+1}-1-\sum_{i=0}^{k-1}C_{k+1}^i*Sum(n,i)} {k+1}

这样我们就可以 O(k2) O ( k 2 ) O(k^2)的递推了,临界点是 Sum(n,0)=n S u m ( n , 0 ) = n Sum(n,0)=n 记忆化搜索即可

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int mod=1e9+7;
long long n,nw,a[55];
int T,mi,k,ans[55],c[55][55];
int fast_pow(int x,int a)
{int ans=1;for (;a;x=1ll*x*x%mod,a>>=1)if (a&1) ans=1ll*ans*x%mod;return ans;
}
int S(int k)
{if (k==0) return nw%mod;if (ans[k]) return ans[k];int Ans=fast_pow((nw+1)%mod,k+1);//cout<<Ans<<endl;int jian=1;for (int i=0;i<=k-1;i++) jian=(jian+1ll*c[i][k+1]*S(i))%mod;Ans=(Ans+mod-jian)%mod;Ans=(1ll*Ans*fast_pow(k+1,mod-2))%mod;ans[k]=Ans;return Ans;
}
int main()
{c[0][0]=1;for (int i=1;i<=52;i++){c[0][i]=1;for (int j=1;j<=i;j++) c[j][i]=(1ll*c[j][i-1]+c[j-1][i-1])%mod;}scanf("%d",&T);while (T--){scanf("%lld%d",&n,&k);for (int i=1;i<=k;i++) scanf("%lld",&a[i]);sort(a+1,a+1+k);mi=k+1;int tot=0;nw=n;for (int i=1;i<=k;i++){memset(ans,0,sizeof(ans));tot=(1ll*tot+S(mi))%mod;for (int j=i;j<=k;j++) tot=(1ll*tot-fast_pow((a[j]-n+nw)%mod,mi)+mod)%mod;//cout<<tot<<endl;nw-=a[i]-a[i-1];}memset(ans,0,sizeof(ans));//cout<<nw<<endl;tot=(1ll*tot+S(mi))%mod;printf("%d\n",tot);}
} 

BZOJ5339: [TJOI2018]教科书般的亵渎-组合数学相关推荐

  1. P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值 + k幂次之和)

    洛谷题目链接 题目大意:有点绕,有 n−mn - mn−m 个怪兽,它们的血量在 [1,n][1,n][1,n] 值域上且每个怪兽的血量都不同 (其中 m 个点被挖掉),你每使用一次亵渎会给所有怪兽血 ...

  2. bzoj 5339 [TJOI2018]教科书般的亵渎 拉格朗日插值

    题面 题目传送门 解法 可以发现,题目可以转化成求若干个形如\(\sum_{i=1}^ni^k\)的东西 这个东西可以拉格朗日插值 大概讲一下拉格朗日插值是个什么东西: 显然,\(\sum_{i=1} ...

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

    题意 题目链接 Sol 打出暴力不难发现时间复杂度的瓶颈在于求\(\sum_{i = 1}^n i^k\) 老祖宗告诉我们,这东西是个\(k\)次多项式,插一插就行了 上面的是\(O(Tk^2)\)的 ...

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

    链接 点击跳转 题解 分析之后,发现这个题主要是解决这个问题: 求 ∑ i = 1 n i k \sum_{i=1}^n i^k i=1∑n​ik 根据某些数学上的结论,这个东西是一个包含 n n n ...

  5. NOI模拟(5.23) TJOID2T3 教科书般的亵渎 (bzoj5339)

    教科书般的亵渎 题目背景: 5.23 模拟 TJOI2018D2T3 分析:拉格朗日差值 这个题的题意怕不是有毒,注意他每一次的k是相同的,为总共要用多少次卡片,然后卡片是每次先将所有的数减一,如果这 ...

  6. 【ybt金牌导航8-3-3】【luogu P4593】分数计算 / 教科书般的亵渎(数学)(拉格朗日插值)

    分数计算 / 教科书般的亵渎 题目链接:ybt金牌导航8-3-3 / luogu P4593 题目大意 有一些怪,血量从 1~n,其中有 m 个数是没有怪的,给出这些数. 然后你可以每次操作攻击所有怪 ...

  7. 教科书般的亵渎(dfs)

    题面: 教科书般的亵渎 Time Limit: 1500MS Memory Limit: 65536K Total Submissions: 36 Accepted: 3 Description &q ...

  8. A - 【深蓝】教科书般的亵渎 (Gym - 102072A )(矩阵快速幂+计算斐波那契数列)

    "现在给大家展示一波教科书般的亵渎" "扭了扭了" 炉石传说是一款比较火的卡牌游戏,不同的卡牌间可以打出许多不可思议的配合. 炉石传说的战斗大部分由随从来完成. ...

  9. 【BZOJ5339】【TJOI2018】教科书般的亵渎

    [题目链接] 点击打开链接 [思路要点] 模拟题目中的过程,我们本质上需要回答\(O(M^2)\)个形如求\(\sum_{i=L}^{R}i^{M+1}\)的询问. 拉格朗日插值即可. 时间复杂度\( ...

最新文章

  1. SO做了Booked之后,一直处理于“已延交”,发运事务处理的活动区变灰
  2. 如何设计一个深度学习项目
  3. 4j 设置日志保存天数_MySQL中的这几类日志,你一定要知道
  4. python语言用什么来表明每行代码的层次关系_《计算机二级Python语言程序设计考试》第2章: Python语言基本语法元素...
  5. openhub_介绍OpenHub框架
  6. 提取tsv数据并转化成json——致找不出怎么提取tsv文件中数据的五小时
  7. mysql报错1517_请教一下 flask+sqlalchemy+mysql 连接错误问题
  8. 【Android】3.24 示例24--OpenGL绘制功能
  9. POJ 3669 简单BFS
  10. Android Studio新建工程syncing失败;Android studio Connection timed out: connect
  11. win7 Ftp搭建
  12. python绘制正多边形_python : turtle 画正多边形
  13. 使用plist文件进行ipa的安装
  14. 【车间调度】改进的帝国企鹅算法求解车间调度问题【含Matlab源码 2041期】
  15. 大数据华而不实么?大数据的本质是什么?
  16. 1 Bootstrap 4起步
  17. 火影忍者中的天才七忍者
  18. Android Webview使用自定义字体加载网页
  19. 个人大数据征信查询浅谈与撸待现象
  20. 20190827-Ubuntu查看内存槽的数目及内存信息

热门文章

  1. AXURE教程:散点图
  2. java体育管理系统6,基于JAVA的体育场馆预约管理系统的设计与实现.docx
  3. M1 24寸iMac值不值得购买?24寸iMac测评
  4. 竣达技术四路交流电电压电流监测单元
  5. netty框架及原理解析
  6. C++软件工程师之什么是宏?
  7. 【MOS】OCR/Vote disk 维护操作: (添加/删除/替换/移动) (文档 ID 1674859.1)
  8. HoloLens开发环境安装部署(基于Unity2018.4/VS2017/MRTK)
  9. 解决spirng无法注入redis工具类及dao层类(Springboot项目)
  10. 低频功率放大器参考电路图解大全