【题目链接】

  • 点击打开链接

【思路要点】

  • 模拟题目中的过程,我们本质上需要回答\(O(M^2)\)个形如求\(\sum_{i=L}^{R}i^{M+1}\)的询问。
  • 拉格朗日插值即可。
  • 时间复杂度\(O(TM^3)\)。

【代码】

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 105;
const int P = 1e9 + 7;
template <typename T> void chkmax(T &x, T y) {x = max(x, y); }
template <typename T> void chkmin(T &x, T y) {x = min(x, y); }
template <typename T> void read(T &x) {x = 0; int f = 1;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';x *= f;
}
template <typename T> void write(T x) {if (x < 0) x = -x, putchar('-');if (x > 9) write(x / 10);putchar(x % 10 + '0');
}
template <typename T> void writeln(T x) {write(x);puts("");
}
int power(int x, int y) {if (y == 0) return 1;int tmp = power(x, y / 2);if (y % 2 == 0) return 1ll * tmp * tmp % P;else return 1ll * tmp * tmp % P * x % P;
}
namespace Lagrange {int N, x[MAXN], y[MAXN], a[MAXN];void work() {memset(a, 0, sizeof(a));static int p[MAXN], q[MAXN];memset(p, 0, sizeof(p)); p[0] = 1;for (int i = 1; i <= N; i++) {int now = P - x[i];for (int j = i; j >= 1; j--)p[j] = (1ll * p[j] * now + p[j - 1]) % P;p[0] = 1ll * p[0] * now % P;}for (int i = 1; i <= N; i++) {memset(q, 0, sizeof(q));for (int j = N; j >= 0; j--)q[j] = (p[j + 1] + 1ll * q[j + 1] * x[i]) % P;int mul = 1;for (int j = 1; j <= N; j++)if (i != j) mul = 1ll * mul * (x[i] - x[j]) % P;if (mul < 0) mul = P + mul;mul = 1ll * power(mul, P - 2) * y[i] % P;for (int j = 0; j <= N; j++)a[j] = (a[j] + 1ll * q[j] * mul) % P;}}int calc(long long n) {n %= P;int ans = 0, now = 1;for (int i = 0; i <= N; i++) {ans = (ans + 1ll * now * a[i]) % P;now = 1ll * now * n % P;}return ans;}void calc(long long n, int m) {static long long x[MAXN];for (int i = 1; i <= m; i++)read(x[i]);sort(x + 1, x + m + 1);x[m + 1] = n + 1;int ans = 0;for (int i = 0; i <= m; i++)for (int j = i; j <= m; j++)ans = (ans + calc(x[j + 1] - x[i] - 1) - calc(x[j] - x[i])) % P;writeln((ans % P + P) % P);}
}
int main() {int T; read(T);while (T--) {long long n; int m;read(n), read(m);using namespace Lagrange;N = m + 5;for (int i = 1; i <= m + 5; i++) {x[i] = i;y[i] = (y[i - 1] + power(i, m + 1)) % P;}work();calc(n, m);}return 0;
}

【BZOJ5339】【TJOI2018】教科书般的亵渎相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 如何在Kubernetes集群动态使用 NAS 持久卷
  2. python函数名的语法_Python 基础语法六 ——函数
  3. jsoup开发网页客户端3
  4. 没有流程的项目管理,都是无用功!
  5. bdphp在线订购是真的么_《瑞评》330i会是宝马粉最后的希望么?
  6. matplotlib输出图形到网页_必学python库Matplotlib教程分享
  7. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车超声波避障实验(有舵机)
  8. 如何快速学习使用mybatis以及总结
  9. 前后端分离如何解决跨域的问题?
  10. 《MySQL——分区表小记》
  11. php snoopy视频教程,php的Snoopy类
  12. perl6 HTTP::UserAgent (2)
  13. 格式小结 html 0926
  14. 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)
  15. java 正则表达式 table_JavaEdge/Java/Java中正则表达式.md at master · VegTableBird/JavaEdge · GitHub...
  16. Python_collections_Counter计数器部分功能介绍
  17. nvcc-V 程序“nvcc”尚未安装。 您可以使用以下命令安装: sudo apt install nvidia-cuda-toolkit
  18. 扒一扒「清华系」的 AI 安防大佬们
  19. 内卷机器下的自我救赎
  20. 国际奥林匹克运动会是怎么来的?

热门文章

  1. 爬虫实战4:爬取猫眼电影排名Top100的详细数据保存到csv文件
  2. 4. 美赛建模总结-3-最佳巧克力蛋糕烤盘(连续)-示例模型
  3. 正点原子STM32F429核心板的插座型号
  4. Launcher3--抽屉
  5. 3D立体相册模板(大小可更改)
  6. Google面试之快乐智力题(Cracking the Coding Interview)
  7. 利用html5中canvas实现类似淘宝的放大图片效果
  8. vue实现rtsp视频直播流
  9. 汽车软件测试的挑战-2022
  10. uniGUI之UniEdit