求 $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. url的配置

    from django.conf.urls import patterns, url urlpatterns = patterns('common.views', url(r'^$', 'index' ...

  2. Swift 学习 用 swift 调用 oc

    开发过程中 很可能  把swift不成熟的地方用成熟的oc 代码来弥补一下 , 下面简单来学习一下,我也是照着视频 学习的 卖弄谈不上 就是一次学习笔记, 具体问题还是具体分析吧. 需求 给展出出来的 ...

  3. C51数据类型

  4. linux中安装软件的集中方法

    一.rpm包安装方式步骤: 引用:1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录:2.打开一个终端,su -成root用户:3.cd soft.version.rpm所 ...

  5. Linux 函数库

    概述 函数库其实就是函数,只不过是系统所调用的函数.这样说吧,我写了一个软件,所有的功能都需要我自己完成吗?其实是不需要的,因为很多功能是别人已经写好的,我只需要拿来用就好了.这些有独立功能并且可以被 ...

  6. Shell编程之Expect自动化交互程序

    一.Expect自动化交互程序 1.spawn命令 通过spawn执行一个命令或程序,之后所有的Expect操作都会在这个执行过的命令或程序进程中进行,包括自动交互功能. 语法: spawn [ 选项 ...

  7. Linux进程中TIME_OUT解析

    TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的.仅仅是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接的时候会出现这个TIMEWAIT.服务器在处理客户端请 ...

  8. springmvc拦截器基本使用

    1.HandlerExecutionChain是一个执行链,当用户的请求到达DispatcherServlet的时候,DispatcherServlet会到HandlerMapping中查找对应的Ha ...

  9. BZOJ4311:向量

    题意:要求支持三个操作,加入删除一个向量,询问当前向量与给定向量的最大值. 题解:线段树时间分治,每个区间做一个凸包,查询的时候到对应区间的凸包上三分. (话说我这个可能有点问题,三分那一块R-L&g ...

  10. HTML中table边框的显示总结

    一.1.显示表格的4个边框:<table border frame=box>2.只显示上边框: <table border frame=above>3.只显示下边框: < ...