求 $k=1,2,\cdots,n \space \space \sum\limits_{i=1}^n a_i^k$

$n \leq 2 \times 10^5$

sol:

时隔多年终于卡过去了

之前 $O(nlog^2n) + O(nlogn)$ 卡了我的 $O(nlog^2n) + O(nlog^2n)$ ,有点自闭

然后 fread + 编译优化 + 预处理单位根 + 不在 fft 里计算 rev 数组大力卡进时限

#include <bits/stdc++.h>
#define LL long long
#define rep(i, s, t) for (register int i = (s), i##end = (t); i <= i##end; ++i)
#define dwn(i, s, t) for (register int i = (s), i##end = (t); i >= i##end; --i)
using namespace std;
const int Size=<<;
char buffer[Size],*head,*tail;
inline char Getchar() {
if(head==tail) {
int l=fread(buffer,,Size,stdin);
tail=(head=buffer)+l;
}
if(head==tail) return -;
return *head++;
}
inline int read() {
int x=,f=;char c=Getchar();
for(;!isdigit(c);c=Getchar()) if(c=='-') f=-;
for(;isdigit(c);c=Getchar()) x=x*+c-'';
return x*f;
}
const int mod = , maxn = ;
int a[maxn], r[maxn], lg[maxn], n, k;
inline int skr(int x, int t) {
int res = ;
while (t) {
if (t & )
res = 1LL * res * x % mod;
x = 1LL * x * x % mod;
t = t >> ;
}
return res;
}
int wn[maxn], iwn[maxn];
void init(int n) {
wn[] = iwn[] = ;
rep(i, , n-) wn[i] = skr(, (mod - ) / (i << ));
rep(i, , n-) iwn[i] = skr(, (mod - ) / (i << ));
}
inline void fft_init(int n) {rep(i, , n - ) r[i] = (r[i >> ] >> ) | ((i & ) << (lg[n] - ));}
inline void fft(int *a, int n, int type) {
rep(i, , n - ) if (i < r[i]) swap(a[i], a[r[i]]);
for (int i = ; i < n; i <<= ) {
//int wn = skr(3, (mod - 1) / (i << 1));
//if (type == -1)
// wn = skr(wn, mod - 2);
int twn = (type == -) ? iwn[i] : wn[i];
for (int j = ; j < n; j += (i << )) {
int w = ;
for (int k = ; k < i; k++, w = 1LL * w * twn % mod) {
int x = a[j + k], y = 1LL * w * a[j + k + i] % mod;
a[j + k] = (x + y) % mod;
a[j + k + i] = (x - y + mod) % mod;
}
}
}
if (type == -) {
int inv_n = skr(n, mod - );
rep(i, , n - ) a[i] = 1LL * a[i] * inv_n % mod;
}
}
int A[maxn], B[maxn];
int C[maxn], D[maxn];
int mul(int *A, int *B, int len) {
fft_init(len);
// fft_init(len);
fft(A, len, );
// for(int i=0;i<len;i++)cout<<A[i]<<" ";
// cout<<endl;
fft(B, len, );
for (int i = ; i < len; i++) A[i] = (LL)A[i] * B[i] % mod;
fft(A, len, -);
--len;
while (!A[len]) --len;
return len;
}
vector<int> poly[maxn];
int solve(int l, int r) {
if (l == r)
return poly[l].size() - ;
int mid = (l + r) >> ;
int ls = solve(l, mid), rs = solve(mid + , r);
int L = ;
for (; L <= ls + rs; L <<= )
; for (int i = ; i <= ls; i++) A[i] = poly[l][i];
for (int i = ls + ; i < L; i++) A[i] = ; for (int i = ; i <= rs; i++) B[i] = poly[mid + ][i];
for (int i = rs + ; i < L; i++) B[i] = ;
poly[l].clear();
poly[mid + ].clear(); L = mul(A, B, L);
for (int i = ; i <= L; i++) poly[l].push_back(A[i]);
return L;
}
int g[maxn], f[maxn];
void mulfac(int *A, int *B, int len) {
fft_init(len);
fft(A, len, );
fft(B, len, );
for (int i = ; i < len; i++) A[i] = 1LL * A[i] * B[i] % mod;
fft(A, len, -);
}
void cdq_fft(int *f, int *g, int l, int r) {
if (l == r) {
(f[l] += (1LL * l * g[l] % mod)) %= mod;
return;
}
int mid = (l + r) >> ;
cdq_fft(f, g, l, mid);
int len = , ls = , rs = ;
// for(;len <= ((r - l + mid)<<1);len <<= 1);
// for(int i=0;i<len;i++)A[i] = B[i] = 0;
for (int i = l; i <= mid; i++) C[ls++] = f[i];
for (int i = ; i <= r - l; i++) D[rs++] = g[i];
for (; len <= (ls + rs - ); len <<= )
;
mulfac(C, D, len);
for (int i = mid + ; i <= r; i++) f[i] = (f[i] + C[i - l - ]) % mod;
for (int i = ; i < len; i++) C[i] = D[i] = ;
cdq_fft(f, g, mid + , r);
}
int main() {
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
lg[] = -; init( << );
rep(i, , maxn - ) lg[i] = lg[i >> ] + ;
int T = read();
while (T--) {
int ans = ;
n = read();
for (int i = ; i <= n; i++) {
a[i] = read();
if(a[i] >= mod) a[i] -= mod;
poly[i].push_back();
poly[i].push_back(a[i]);
}
solve(, n);
for (int i = ; i < poly[].size(); i++) g[i] = (((i & ) ? : (-)) * poly[][i] + mod) % mod;
poly[].clear();
cdq_fft(f, g, , n);
for (int i = ; i <= n; i++) ans ^= f[i];
memset(f, , sizeof(f));
memset(g, , sizeof(g));
memset(A, , sizeof(A));
memset(B, , sizeof(B));
memset(C, , sizeof(C));
memset(D, , sizeof(D));
cout << ans << endl;
}
}

然而这种 shabi 题为什么我能写 6K,给镘写也就 100 行,我菜的真实

THUPC2017 小 L 的计算题的更多相关文章

  1. LOJ 2409「THUPC 2017」小 L 的计算题 / Sum

    思路 和玩游戏一题类似 定义\(A_k(x)=\sum_{i=0}^\infty a_k^ix^i=\frac{1}{1-a_kx}\) 用\(\ln 'x\)代替\(\frac{1}{x}\), 所 ...

  2. LOJ#2409. 「THUPC 2017」小 L 的计算题 / Sum(生成函数)

    题意 给定一个长为 \(n\) 的序列 \(\{a_i\}\) 对于 \(k \in [1, n]\) 求 \[ f_k = \sum_{i = 1}^{n} a_i^k \pmod {9982443 ...

  3. 题解 「THUPC 2017」小 L 的计算题 / Sum

    题目传送门 题目大意 给出 \(a_{1,2,...,n}\),对于 \(\forall k\in [1,n]\) ,求出: \[\sum_{i=1}^{n}a_i^k \] \(n\le 2\tim ...

  4. 【BZOJ4030】[HEOI2015]小L的白日梦

    [BZOJ4030][HEOI2015]小L的白日梦 题面 BZOJ 洛谷 题解 要求的是最小的不开心连续段的期望. 然后发现自己就不会做了. 然后就可以来抄题解啦. 首先来猜性质: 第一个,一定是按 ...

  5. T2487 公交司机(搜索题)(小L的一生)

    https://www.luogu.org/problem/show?pid=T2487 题目背景 小L那没出息的儿子当上了一个公交司机. 题目描述 每个司机都有一个牌子,牌子的正面标出了这个司机所开 ...

  6. BZOJ 4030: [HEOI2015]小L的白日梦

    4030: [HEOI2015]小L的白日梦 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 172  Solved: 39[Submit][Statu ...

  7. 洛谷U4727小L的二叉树[树转序列 LIS]

    题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 题目描述 在计算机科学中,二叉树是每个结点最多有两个子结点的 ...

  8. PMP--可能会涉及到的计算题

    一.进度管理里的历时三点估算历时的三点估算可能会出现在进度管理的计算题里.以下公式,大家要记住:说一下历时的三点估算中的几个值:1.最有可能的历时估算:Tm2.最乐观的历时估算: To3.最悲观的历时 ...

  9. 小L的试卷

    题目描述 小L期末考试结束,高高兴兴放假回家了,可是那么多试卷,老师还要加班批改,有n份试卷由k个老师批改,n份试卷进行了密封编号,由于试卷上的做题情况和书写的规范程序不一样,批改不同的试卷用时也可能 ...

随机推荐

  1. Oracle查询结果列的加减、求和、连接、列值相乘

    select prod.amount,prod.plansum,(prod.plansum-prod.amount) as borrow,d.enum_value from ----结果集相减(sel ...

  2. celery的安装和使用

    celery是python开发的分布式任务调度模块,接口简单,开发容易,五分钟就写出一个异步发送邮件的服务,celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,celery支持的消息服 ...

  3. eclipse(1)----ubuntu下的安装与配置

    eclipse的安装与配置 1.eclipse官网下载,最新版本eclipse-jee-oxygen-3-linux-gtk-x86_64.tar.gz 2.tar包存在~/Download/下,解压 ...

  4. 算法寒假实习面试经过之 十一贝(offer) 联想研究院(电话一面 被拒)

    联想研究院 1面 自我介绍 聊比赛,讲了讲jdd的. 感觉都快要背过了... 之前重复的问题就不说了,说一下印象比较深的 adaboost 与gbdt的区别 随机森林,如果有t个特征,n个树,每个树深 ...

  5. iOS objc_setAssociatedObject 关联对象的学习

    今天看了FDTemplateLayoutCell的源码,类别里面相当频繁使用了关联对象,做笔记!!!学套路 主要函数: void objc_setAssociatedObject(id object, ...

  6. iOS Xcode 8 打包上架 配置文件问题 此构建版本无效 推送问题 攻克 刚刚 waiting for review

    煎熬...  本来xcode 7 打包正在审核了 还要修改一处购买问题  此时 xcode已经升级到xcode 8 了 升级后 很神奇 应用没报错 很好的运行 (网上很多说xib storyboard ...

  7. $《第一行代码:Android》读书笔记——第10章 Android网络编程

    (一)WebView的用法 1.WebView也是一个普通的控件. 2.常用用法: WebView webView = (WebView)findViewById(R.id.web_view); we ...

  8. 0802 DRF 视图

    昨日回顾: 1. Serializer(序列化) 1. ORM对应的query_set和ORM对象转换成JSON格式的数据 1. 在序列化类中定义自定义的字段:SerializerMethodFiel ...

  9. 20145230《java学习笔记》第九周学习总结

    20145230 <Java程序设计>第9周学习总结 教材学习内容 JDBC JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作, ...

  10. Deep Learning概述

    1.深度学习发展简史 2.三步实现深度学习 2.1Neural Network 神经网络由模仿脑部神经系统发展而来,一个节点称为一个“Neuron”,包括连接在节点上面的weights和biases. ...