【BZOJ5339】【TJOI2018】教科书般的亵渎
【题目链接】
- 点击打开链接
【思路要点】
- 模拟题目中的过程,我们本质上需要回答\(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】教科书般的亵渎相关推荐
- BZOJ5339: [TJOI2018]教科书般的亵渎-组合数学
传送门 题意: 在炉石传说中有这样的一个场面:n个随从,血量为1~n,现在去除m个随从,然后开始释放"亵渎".每使用一张"亵渎"会获得一定的分数,分数计算如下: ...
- P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值 + k幂次之和)
洛谷题目链接 题目大意:有点绕,有 n−mn - mn−m 个怪兽,它们的血量在 [1,n][1,n][1,n] 值域上且每个怪兽的血量都不同 (其中 m 个点被挖掉),你每使用一次亵渎会给所有怪兽血 ...
- bzoj 5339 [TJOI2018]教科书般的亵渎 拉格朗日插值
题面 题目传送门 解法 可以发现,题目可以转化成求若干个形如\(\sum_{i=1}^ni^k\)的东西 这个东西可以拉格朗日插值 大概讲一下拉格朗日插值是个什么东西: 显然,\(\sum_{i=1} ...
- 洛谷P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)
题意 题目链接 Sol 打出暴力不难发现时间复杂度的瓶颈在于求\(\sum_{i = 1}^n i^k\) 老祖宗告诉我们,这东西是个\(k\)次多项式,插一插就行了 上面的是\(O(Tk^2)\)的 ...
- 洛谷P4593 [TJOI2018]教科书般的亵渎
链接 点击跳转 题解 分析之后,发现这个题主要是解决这个问题: 求 ∑ i = 1 n i k \sum_{i=1}^n i^k i=1∑nik 根据某些数学上的结论,这个东西是一个包含 n n n ...
- NOI模拟(5.23) TJOID2T3 教科书般的亵渎 (bzoj5339)
教科书般的亵渎 题目背景: 5.23 模拟 TJOI2018D2T3 分析:拉格朗日差值 这个题的题意怕不是有毒,注意他每一次的k是相同的,为总共要用多少次卡片,然后卡片是每次先将所有的数减一,如果这 ...
- 【ybt金牌导航8-3-3】【luogu P4593】分数计算 / 教科书般的亵渎(数学)(拉格朗日插值)
分数计算 / 教科书般的亵渎 题目链接:ybt金牌导航8-3-3 / luogu P4593 题目大意 有一些怪,血量从 1~n,其中有 m 个数是没有怪的,给出这些数. 然后你可以每次操作攻击所有怪 ...
- 教科书般的亵渎(dfs)
题面: 教科书般的亵渎 Time Limit: 1500MS Memory Limit: 65536K Total Submissions: 36 Accepted: 3 Description &q ...
- A - 【深蓝】教科书般的亵渎 (Gym - 102072A )(矩阵快速幂+计算斐波那契数列)
"现在给大家展示一波教科书般的亵渎" "扭了扭了" 炉石传说是一款比较火的卡牌游戏,不同的卡牌间可以打出许多不可思议的配合. 炉石传说的战斗大部分由随从来完成. ...
最新文章
- ssh开发实战之整合篇
- saltstack之(二)软件包下载安装
- Spark RDD概念学习系列之RDD的重要内部属性(十五)
- 超图桌面版制作一幅简单专题图示例
- 零基础学Python-爬虫-4、下载网络图片
- kickstart及引导镜像制作
- python 爬虫002-http与urllib2
- 线上流量越发昂贵,如何通过裂变营销实现业务增长?
- Nacos 新增命名空间
- 【转】:TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
- Docker 核心技术 NameSpace, CGroup, AUFS, DeviceMapper
- AR学习笔记(四):相关文献查阅
- conan-transit服上的库列表
- 最新麦子学院嵌入式开发系列培训教程
- 剪刀石头布(自留底)01
- LIMS和TDM比较分析
- HTML5游戏开发案例教程
- Oracle之TO_DATE用法详解
- 机器学习最易懂之EM算法详解与python实现
- 半生颠沛流离,归来仍是少年。这人生啊,如梦!