用的dls的板子,因为看不懂调了好久...果然用别人的板子就是这么蛋疼- -||

num数组0~k+1储存了k+2个值,且这k+2个值是自然数i的k次方而不是次方和,dls的板子自己帮你算和的...搞得我弄了好久

 #include <iostream>
#include <string.h>
#include <cstdio>
#include <vector>
#include <queue>
#include <assert.h>
#include <math.h>
#include <string>
#include <algorithm>
#include <functional> #define SIGMA_SIZE 26
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(x) (x&-x)
#define foe(i, a, b) for(int i=a; i<=b; i++)
#define fo(i, a, b) for(int i=a; i<b; i++)
#define pii pair<int,int>
#pragma warning ( disable : 4996 ) using namespace std;
typedef long long LL;
inline LL LMax(LL a, LL b) { return a>b ? a : b; }
inline LL LMin(LL a, LL b) { return a>b ? b : a; }
inline LL lgcd(LL a, LL b) { return b == ? a : lgcd(b, a%b); }
inline LL llcm(LL a, LL b) { return a / lgcd(a, b)*b; } //a*b = gcd*lcm
inline int Max(int a, int b) { return a>b ? a : b; }
inline int Min(int a, int b) { return a>b ? b : a; }
inline int gcd(int a, int b) { return b == ? a : gcd(b, a%b); }
inline int lcm(int a, int b) { return a / gcd(a, b)*b; } //a*b = gcd*lcm
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = 1e9+;
const double eps = 1e-;
const int inf = 0x3f3f3f3f;
const int maxk = 3e6 + ;
const int maxn = 1e6+; /// 注意mod,使用前须调用一次 polysum::init(int M);
namespace polysum {
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
typedef long long ll;
const ll mod = 1e9 + ; /// 取模值
ll powmod(ll a, ll b) { ll res = ; a %= mod; assert(b >= ); for (; b; b >>= ) { if (b & )res = res*a%mod; a = a*a%mod; }return res; } const int D = ; /// 最高次限制
ll a[D], f[D], g[D], p[D], p1[D], p2[D], b[D], h[D][], C[D];
ll calcn(int d, ll *a, ll n) {
if (n <= d) return a[n];
p1[] = p2[] = ;
rep(i, , d + ) {
ll t = (n - i + mod) % mod;
p1[i + ] = p1[i] * t%mod;
}
rep(i, , d + ) {
ll t = (n - d + i + mod) % mod;
p2[i + ] = p2[i] * t%mod;
}
ll ans = ;
rep(i, , d + ) {
ll t = g[i] * g[d - i] % mod*p1[i] % mod*p2[d - i] % mod*a[i] % mod;
if ((d - i) & ) ans = (ans - t + mod) % mod;
else ans = (ans + t) % mod;
}
return ans;
}
void init(int M) { /// M:最高次
f[] = f[] = g[] = g[] = ;
rep(i, , M + ) f[i] = f[i - ] * i%mod;
g[M + ] = powmod(f[M + ], mod - );
per(i, , M + ) g[i] = g[i + ] * (i + ) % mod;
}
ll polysum(ll n, ll *arr, ll m) { /// a[0].. a[m] \sum_{i=0}^{n-1} a[i]
for (int i = ; i <= m; i++)
a[i] = arr[i];
a[m + ] = calcn(m, a, m + );
rep(i, , m + ) a[i] = (a[i - ] + a[i]) % mod;
return calcn(m + , a, n - );
}
ll qpolysum(ll R, ll n, ll *a, ll m) { /// a[0].. a[m] \sum_{i=0}^{n-1} a[i]*R^i
if (R == ) return polysum(n, a, m);
a[m + ] = calcn(m, a, m + );
ll r = powmod(R, mod - ), p3 = , p4 = , c, ans;
h[][] = ; h[][] = ;
rep(i, , m + ) {
h[i][] = (h[i - ][] + a[i - ])*r%mod;
h[i][] = h[i - ][] * r%mod;
}
rep(i, , m + ) {
ll t = g[i] * g[m + - i] % mod;
if (i & ) p3 = ((p3 - h[i][] * t) % mod + mod) % mod, p4 = ((p4 - h[i][] * t) % mod + mod) % mod;
else p3 = (p3 + h[i][] * t) % mod, p4 = (p4 + h[i][] * t) % mod;
}
c = powmod(p4, mod - )*(mod - p3) % mod;
rep(i, , m + ) h[i][] = (h[i][] + h[i][] * c) % mod;
rep(i, , m + ) C[i] = h[i][];
ans = (calcn(m, C, n)*powmod(R, n) - c) % mod;
if (ans<) ans += mod;
return ans;
}
} LL num[maxn];
LL n, k; void init()
{
for( int i = ; i <= k+; i++ )
num[i] = polysum::powmod((LL)i+, k);
} int main(){
cin >> n >> k; polysum::init(k);
init(); LL ans = polysum::polysum(n, num, k+)%mod;
printf("%lld\n", ans);
return ;
}

【CF622F】The Sum of the k-th Powers (拉格朗日插值法)的更多相关文章

  1. Educational Codeforces Round 7 F. The Sum of the k-th Powers 拉格朗日插值法

    F. The Sum of the k-th Powers 题目连接: http://www.codeforces.com/contest/622/problem/F Description Ther ...

  2. codeforces 622F. The Sum of the k-th Powers 拉格朗日插值法

    题目链接 求sigma(i : 1 to n)i^k. 为了做这个题这两天真是补了不少数论, 之前连乘法逆元都不知道... 关于拉格朗日插值法, 我是看的这里http://www.guokr.com/ ...

  3. [题解] CF622F The Sum of the k-th Powers

    CF622F The Sum of the k-th Powers 题意:给\(n\)和\(k\),让你求\(\sum\limits_{i = 1} ^ n i^k \ mod \ 10^9 + 7\ ...

  4. 解题:CF622F The Sum of the k-th Powers

    题面 TJOI2018出CF原题弱化版是不是有点太过分了?对,就是 TJOI2018 教科书般的亵渎 然而我这个问题只会那个题的范围的m^3做法 回忆一下1到n求和是二次的,平方求和公式是三次的,立方 ...

  5. Educational Codeforces Round 7 F - The Sum of the k-th Powers 拉格朗日插值

    The Sum of the k-th Powers There are well-known formulas: , , . Also mathematicians found similar fo ...

  6. [Swift]LeetCode862. 和至少为 K 的最短子数组 | Shortest Subarray with Sum at Least K

    Return the length of the shortest, non-empty, contiguous subarray of A with sum at least K. If there ...

  7. LeetCode862. Shortest Subarray with Sum at Least K

    Return the length of the shortest, non-empty, contiguous subarray of A with sum at least K. If there ...

  8. leetcode 862 shorest subarray with sum at least K

    https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/ 首先回顾一下求max子数组的值的方法是:记录一个前缀min值, ...

  9. 862. Shortest Subarray with Sum at Least K

    Return the length of the shortest, non-empty, contiguous subarray of A with sum at least K. If there ...

随机推荐

  1. NX二次开发-UFUN获取当前导出CGM选项设置UF_CGM_ask_session_export_options

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

  2. SSDT

    2.系统服务调度表SSDT及SSSDT Shadow 系统服务:由操作系统提供的一组函数(内核函数),API可以间接或者直接的调用系统服务.操作系统以动态链接库(DLL)的形式提供API. SSDT: ...

  3. LeetCode 1037. Valid Boomerang (有效的回旋镖)

    题目标签:Math 题目给了我们三个点,让我们判断这三个点是否在一条直线上. 利用斜率 k = (y1 - y0) / (x1 - x0) 来判断,如果 三个点 abc, ab 的斜率 = bc 的斜 ...

  4. JVM内核-原理、诊断与优化学习笔记(五):GC参数

    文章目录 堆的回顾 串行收集器 并行收集器 ParNew(par-并行的缩写,new-新生代,所以只是新生代并行) Parallel收集器 参数设置 -XX:MaxGCPauseMills -XX:G ...

  5. AtCoder ABC 132F Small Products

    题目链接:https://atcoder.jp/contests/abc132/tasks/abc132_f 题目大意 分析 代码如下

  6. Jsoup 学习笔记

    这里写自定义目录标题 Jsoup 学习笔记 解析 HTML 的字符串解析 URL 解析 本地文件解析 解析数据 DOM 解析 使用选择器解析 选择器概述 选择器组合用法 过滤用法 修改数据 HTML ...

  7. 20140403 opencv GPU安装

    1.  查看本机配置,查看显卡类型是否支持NVIDIA GPU,本机显卡为NVIDIA GeForce 8400 GS: 2.  从http://www.nvidia.cn/Download/inde ...

  8. 随笔-ansible-4

    触发器: 一个任务同时调用多个触发器: 为远程主机上的用户设置环境变量: 保存前一步命令的输出结果,并保存到foo中: 添加环境变量的另一种方式: 注意:lineinfile模块只适用于修改少量环境变 ...

  9. PKPM快捷键

    e删除sc删除节点hq绘制直线墙lbz布置梁zz楼层组装bsc板生成bxg板修改门窗洞dbz(洞布置)全房间洞(fd)正交轴网zww拉伸s

  10. 利用msbuild白名单执行shellcode

    x64:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe x32:C:\Windows\Microsoft.NET\Framewo ...