题目链接

洛谷P4593

题解

orz dalao

upd:经典的自然数幂和,伯努利数裸题

由题我们只需模拟出代价,只需使用\(S(n,k) = \sum\limits_{i = 1}^{n} i^{k}\)这样的前缀和计算

我不知道怎么来的这样一个公式:

\[(n + 1)^{k} - n^{k} = \sum\limits_{i = 1}^{k} {k \choose i}n^{k - i}
\]

这玩意怎么来的呢?

左边为\((n + 1)^k - n^k\),\((n+1)^k\)可以看做有\(k\)个位置进行染色,每个位置有\(n + 1\)种染色的方案数,减去\(n^k\),就代表了拥有第\(n + 1\)种颜色的染色方案数

那么这个等式就很好理解了,我们枚举第\(n + 1\)种颜色染了多少个,就得到了右式

我们发现这个公式右侧涵盖了所有\(n^i \quad[ i \in [0,k]]\)的项,我们令\(k = k + 1\),如果我们将所有\(n\)枚举出来,将会的得到:

\[\begin{aligned}
(n + 1)^{k + 1} - n^{k + 1} &= \sum\limits_{i = 1}^{k + 1} {k + 1\choose i}n^{k + 1 - i} \\
n^{k + 1} - (n - 1)^{k + 1} &= \sum\limits_{i = 1}^{k + 1} {k + 1\choose i}(n - 1)^{k + 1 - i} \\
......... \\
2^{k + 1} - 1^{k + 1} &= \sum\limits_{i = 1}^{k + 1} {k + 1\choose i}1^{k + 1 - i} \\
\end{aligned}
\]

全部相加,得到:

\[(n + 1)^{k + 1} - 1 = \sum\limits_{i= 1}^{k + 1} {k + 1 \choose i} S(n,k + 1 - i)
\]

取出\(S(n,k)\)

\[S(n,k) = \frac{(n + 1)^{k + 1} - 1 - \sum\limits_{i = 0}^{k - 1}{k + 1 \choose i} S(n,i)}{k + 1}
\]

发现就可以\(O(k^2)\)递推了

由于模拟也是\(O(k^2)\)的

所以最终复杂度\(O(k^4)\)

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<cmath>
  6. #include<map>
  7. #define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
  8. #define REP(i,n) for (int i = 1; i <= (n); i++)
  9. #define mp(a,b) make_pair<int,int>(a,b)
  10. #define cls(s) memset(s,0,sizeof(s))
  11. #define cp pair<int,int>
  12. #define LL long long int
  13. using namespace std;
  14. const int maxn = 105,maxm = 100005,INF = 1000000000,P = 1000000007;
  15. inline LL read(){
  16. LL out = 0,flag = 1; char c = getchar();
  17. while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
  18. while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
  19. return out * flag;
  20. }
  21. LL a[maxn],fac[maxn],fv[maxn],inv[maxn],n,m,K;
  22. void init(){
  23. fac[0] = fac[1] = fv[0] = fv[1] = inv[0] = inv[1] = 1;
  24. for (int i = 2; i < maxn; i++){
  25. fac[i] = 1ll * fac[i - 1] * i % P;
  26. inv[i] = 1ll * (P - P / i) * inv[P % i] % P;
  27. fv[i] = 1ll * fv[i - 1] * inv[i] % P;
  28. }
  29. }
  30. LL C(LL n,LL m){
  31. return 1ll * fac[n] * fv[m] % P * fv[n - m] % P;
  32. }
  33. LL qpow(LL a,LL b){
  34. LL ans = 1; a %= P;
  35. for (; b; b >>= 1,a = a * a % P)
  36. if (b & 1) ans = ans * a % P;
  37. return ans;
  38. }
  39. LL f[maxn];
  40. LL S(LL n,LL k){
  41. if (!n) return 0;
  42. f[0] = n % P;
  43. for (int i = 1; i <= k; i++){
  44. LL tmp = 0;
  45. for (int j = 0; j <= i - 1; j++)
  46. tmp = (tmp + C(i + 1,j) * f[j] % P) % P;
  47. f[i] = (((qpow(n + 1,i + 1) - 1) % P - tmp) % P + P) % P * inv[i + 1] % P;
  48. }
  49. return f[k];
  50. }
  51. LL b[maxn];
  52. int main(){
  53. init();
  54. int T = read();
  55. while (T--){
  56. n = read(); m = read(); K = m + 1;
  57. REP(i,m) a[i] = read(); a[K] = n + 1;
  58. sort(a + 1,a + 1 + K);
  59. LL ans = 0;
  60. for (int i = 0; i <= m; i++){
  61. for (int j = i; j <= m; j++){
  62. ans = ((ans + (S(a[j + 1] - 1,K) - S(a[j],K)) % P) % P + P) % P;
  63. }
  64. LL len = a[i + 1] - a[i];
  65. for (int j = i + 1; j <= K; j++) a[j] -= len;
  66. }
  67. printf("%lld\n",ans);
  68. }
  69. return 0;
  70. }

洛谷P4593 [TJOI2018]教科书般的亵渎 【数学】的更多相关文章

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

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

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

    小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为\(a_i\)​,且每个怪物血量均不相同,小豆手里有无限张"亵渎".亵渎的效果是对所有的怪造成\(1\)点伤害,如果 ...

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

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

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

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

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

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

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

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

  7. p4593 [TJOI2018]教科书般的亵渎

    分析 我们发现$Ans = \sum_i \sum_j (j-p_i)^{m+1}$ 因此直接套用622f的方法即可 代码 #include<bits/stdc++.h> using na ...

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

    [BZOJ5339][TJOI2018]教科书般的亵渎(斯特林数) 题面 BZOJ 洛谷 题解 显然交亵渎的次数是\(m+1\). 那么这题的本质就是让你求\(\sum_{i=1}^n i^{m+1} ...

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

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

随机推荐

  1. grafana使用Prometheus数据源监控mongo数据库

    数据库改用mongo后,监控需求就需要整合进grafana里,由于一直在坚持docker化部署,那么此次也不例外. 1. 安装Prometheus: What is Prometheus? Prome ...

  2. Java : 多态表现:静态绑定与动态绑定(向上转型的运行机制)

    本来想自己写写的,但是看到有人分析的可以说是很清晰了,故转过来. 原文地址:http://www.cnblogs.com/ygj0930/p/6554103.html 一:绑定 把一个方法与其所在的类 ...

  3. Hadoop(15)-MapReduce框架原理-FileInputFormat的实现类

    1. TextInputFormat 2.KeyValueTextInputFormat 3. NLineInputFormat

  4. Python的scrapy之爬取豆瓣影评和排名

    基于scrapy框架的爬影评 爬虫主程序: import scrapy from ..items import DoubanmovieItem class MoviespiderSpider(scra ...

  5. 5.Python的语言特点

    前言   Python有哪些语言特点?可以列出的特点很多,例如,<Python核心编程>第二版列出了十多条特点.本文的三个特点是笔者学习Python的体会,其他特点有体会之后再写,笔者是这 ...

  6. Druid时序数据库升级流程

    目前Druid集群版本为0.11.0,新版本0.12.1已支持Druid SQL和Redis,考虑到Druid新特性以及性能的提升,因此需要将Druid从0.11.0版本升级到0.12.1版本,下面将 ...

  7. BFS 队列

    Plague Inc. is a famous game, which player develop virus to ruin the world. JSZKC wants to model thi ...

  8. mono webreques https exception

    前几天在做一个使用URL通过WebRequest请求HTML页面的功能的时候遇到了点坑,程序在开发环境没有任何的问题,部署到linux mono上之后就跪了.代码如下: public static s ...

  9. 「日常训练」「小专题·图论」 Cow Contest (1-3)

    题意 分析 问题是要看出来这是个floyd闭包问题.我没看出来- - 分析之后补充. 代码 // Origin: // Theme: Graph Theory (Basic) // Date: 080 ...

  10. Charles的Https抓包及弱网配置

    一.Charles的主要功能 (1)截取Http 和 Https 网络封包. (2)支持重发网络请求,修改请求参数,方便后端调试. (3)支持模拟弱网环境. 二.配置简单抓包 1.设置系统代理:勾选P ...