洛谷题目链接


题目大意:有点绕,有 n−mn - mn−m 个怪兽,它们的血量在 [1,n][1,n][1,n] 值域上且每个怪兽的血量都不同 (其中 m 个点被挖掉),你每使用一次亵渎会给所有怪兽血量 减一,若有怪兽死亡(血量为0),则自动再使用一次亵渎(这并不算你使用,求答案时不考虑自动使用的贡献),设最多要使用 k 张亵渎才能杀死所有怪兽,你每使用一次亵渎,每个活着的怪兽都会产生 xkx^kxk 的分数贡献,其中 xxx 是使用亵渎之前的血量。求最后获得的总分数。

首先 k=m+1k = m + 1k=m+1,第一次当成在0位置使用一次亵渎,每有一个空位,都要使用一次亵渎,连续的段使用一次就可以全部杀死。由于空位较少,考虑在每个空位使用亵渎计算全部的贡献最后再扣掉空位的贡献。

在 0 空位使用一次亵渎的贡献显然是 :∑i=1nik−(0空位后面所有空位的贡献)\displaystyle\sum_{i = 1}^ni^k-(0空位后面所有空位的贡献)i=1∑n​ik−(0空位后面所有空位的贡献)

下次在 p 空位使用一次亵渎的贡献是 :∑i=1n−pik−(p空位后面所有空位的贡献)\displaystyle\sum_{i = 1}^{n-p}i^k-(p空位后面所有空位的贡献)i=1∑n−p​ik−(p空位后面所有空位的贡献)

枚举所有空位,在每个空位计算贡献 :∑i=1n−pik\displaystyle\sum_{i=1}^{n-p}i^ki=1∑n−p​ik,这个式子可以用拉格朗日插值快速计算。

对每个空位需要扣掉的贡献:枚举这个空位 p 之前的所有空位 x,扣掉 (p−x)k(p-x)^k(p−x)k

复杂度 O((m2+mn)∗log⁡(mod))O((m^2 + mn)*\log(mod))O((m2+mn)∗log(mod))


代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
const int mod = 1e9 + 7;
typedef long long ll;
int mx,t,a[maxn];
inline ll add(ll x, ll y) {x += y;if (x >= mod) x -= mod;return x;
}inline ll sub(ll x, ll y) {x -= y;if (x < 0) x += mod;return x;
}inline ll mul(ll x, ll y) {return x * y % mod;
}
ll fpow(ll a,ll b) {ll r = 1;while(b) {if (b & 1) r = mul(r,a);b >>= 1;a = mul(a,a);}return r;
}
ll g[maxn],f[maxn],u[maxn],r[maxn],k,n,m;
ll fac[maxn],ifac[maxn];
ll cal(ll g[maxn],ll x) {           //拉格朗日插值计算多项式if (x <= mx) return g[x];ll tmp = 1,inv,ans = 0;for (int i = 1; i <= mx; i++)tmp = mul(tmp,x - i);for (int i = 1; i <= mx; i++) {ll res = 1, inv = fpow(x - i,mod - 2);res = mul(res,g[i]);res = mul(res,ifac[i - 1]);res = mul(res,ifac[mx - i]);res = mul(res,inv);res = mul(res,tmp);if ((mx - i) & 1) res = mul(res,-1);if (res < 0) res += mod;ans = add(ans,res);}return ans;
}
ll C(int x,int y) {if (y > x || x < 0) return 0;return mul(mul(ifac[y],ifac[x - y]),fac[x]);
}
int main() {fac[0] = 1;for (int i = 1; i <= 1000; i++)fac[i] = mul(fac[i - 1],i);ifac[1000] = fpow(fac[1000],mod - 2);for (int i = 1000 - 1; i >= 0; i--)ifac[i] = mul(ifac[i + 1],i + 1);scanf("%d",&t);while (t--) {scanf("%d%d",&n,&m);for (int i = 1; i <= m; i++) {scanf("%d",&a[i]);}sort(a + 1,a + m + 1);mx = m + 3;a[0] = g[0] = 0;for (int i = 1; i <= mx; i++)g[i] = add(g[i - 1],fpow(i,m + 1));ll ans = 0;for (int i = 0; i <= m; i++) {ans = add(ans,cal(g,n - a[i]));for (int j = 0; j <= i; j++)ans = sub(ans,fpow(a[i] - a[j],m + 1));}printf("%lld\n",ans);}return 0;
}

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

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

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

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

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

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

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

  4. BZOJ5339: [TJOI2018]教科书般的亵渎-组合数学

    传送门 题意: 在炉石传说中有这样的一个场面:n个随从,血量为1~n,现在去除m个随从,然后开始释放"亵渎".每使用一张"亵渎"会获得一定的分数,分数计算如下: ...

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

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

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

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

  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. 牛客网暑期ACM多校训练营(第六场)J Heritage of skywalkert
  2. 初学Java,如何成为年薪50万的程序员?
  3. Java技术:SpringBoot集成FreeMarker生成word文件
  4. 9 C++ Boost 多线程,线程同步
  5. 九度oj题目1518:反转链表
  6. java怎样将多个list写入txt中并且不覆盖原有数据_java容器,面试必备知识点整理!...
  7. 本地jupyter notebook远程连接服务器
  8. 华硕主板升级BIOS的全过程,用华硕的小伙伴都忍不住升级啦!
  9. 毕业设计之 - 题目:基于LSTM的预测算法 - 股票预测 天气预测 房价预测
  10. 【C#】Winform常用属性和事件笔记大全(入门者参考)
  11. 浅谈系统实现层面稳定性保障
  12. 【现代密码学原理】——消息认证码(学习笔记)
  13. 淘客app开发成本要多少
  14. 医学人工智能读书会与黄智生教授简历(公号回复“医学AI读书会”下载PDF资料,欢迎转发、赞赏、支持科普)
  15. maven 使用本地库
  16. MYSQL操作数据库-------查看、删除数据库
  17. 360浏览器html位置,360浏览器的默认安装路径在哪里
  18. MeeGo操作系统 华硕Eee PC X101在美上架
  19. SQLite3 dll加载失败问题解决
  20. 什么是操作系统?操作系统的主要特性是什么?主要功能是什么?

热门文章

  1. HDFS成员的工作机制
  2. C4D基础学习(二)-移动与捕捉工具
  3. 利用Wifidog实现微信wifi连接以及自写认证服务器
  4. 保研科研竞赛宣讲会,我给学弟学妹做宣讲的PPT实例,自我介绍经验分享PPT应该怎么做,PPT模板资料分享,包含哪些部分
  5. 怎样删除office2019拥有多个都需要激活的授权信息
  6. netty对http协议解析原理解析
  7. 计算机专业网名英语翻译,个性网-网名-各种英文网名带翻译*英文网名
  8. 老板说java后台管理系统3天内必须上线,我丢了这套源码给他
  9. 内存颗粒版本判断方法和编号解析(三星、美光、海力士)
  10. 立足信息时代起点 探索企业营销新模式