THUPC2017 小 L 的计算题
求 $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 的计算题的更多相关文章
- 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}\), 所 ...
- LOJ#2409. 「THUPC 2017」小 L 的计算题 / Sum(生成函数)
题意 给定一个长为 \(n\) 的序列 \(\{a_i\}\) 对于 \(k \in [1, n]\) 求 \[ f_k = \sum_{i = 1}^{n} a_i^k \pmod {9982443 ...
- 题解 「THUPC 2017」小 L 的计算题 / Sum
题目传送门 题目大意 给出 \(a_{1,2,...,n}\),对于 \(\forall k\in [1,n]\) ,求出: \[\sum_{i=1}^{n}a_i^k \] \(n\le 2\tim ...
- 【BZOJ4030】[HEOI2015]小L的白日梦
[BZOJ4030][HEOI2015]小L的白日梦 题面 BZOJ 洛谷 题解 要求的是最小的不开心连续段的期望. 然后发现自己就不会做了. 然后就可以来抄题解啦. 首先来猜性质: 第一个,一定是按 ...
- T2487 公交司机(搜索题)(小L的一生)
https://www.luogu.org/problem/show?pid=T2487 题目背景 小L那没出息的儿子当上了一个公交司机. 题目描述 每个司机都有一个牌子,牌子的正面标出了这个司机所开 ...
- BZOJ 4030: [HEOI2015]小L的白日梦
4030: [HEOI2015]小L的白日梦 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 172 Solved: 39[Submit][Statu ...
- 洛谷U4727小L的二叉树[树转序列 LIS]
题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 题目描述 在计算机科学中,二叉树是每个结点最多有两个子结点的 ...
- PMP--可能会涉及到的计算题
一.进度管理里的历时三点估算历时的三点估算可能会出现在进度管理的计算题里.以下公式,大家要记住:说一下历时的三点估算中的几个值:1.最有可能的历时估算:Tm2.最乐观的历时估算: To3.最悲观的历时 ...
- 小L的试卷
题目描述 小L期末考试结束,高高兴兴放假回家了,可是那么多试卷,老师还要加班批改,有n份试卷由k个老师批改,n份试卷进行了密封编号,由于试卷上的做题情况和书写的规范程序不一样,批改不同的试卷用时也可能 ...
随机推荐
- 缓存:Memcached Redis
一.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...
- Kattis - prva 【字符串】
题意 从上到下 或者 从左到右 组成的长度 >= 2 的字符串 如果遇到 # 就断掉 输出 字典序最小的那一个 思路 只要从上到下 和从左到右 分别遍历一遍,将 长度 >= 2 的字符串 ...
- python爬虫之urllib库
请求库 urllib urllib主要分为几个部分 urllib.request 发送请求urllib.error 处理请求过程中出现的异常urllib.parse 处理urlurllib.robot ...
- 数据库系统概论学习4-SQL 语句和关系代数(二)单表查询
4.12 字符匹配 精确查询和模糊查询 在这一节之前,我们学习的查询几乎都是精确查询,这就需要我们明确地知道某些属性的具体值.例如我们需要查询 'Wangxiaoxiao' 同学的信息,就需要在WHE ...
- MySQL锁机制和PHP锁机制
模拟准备--如何模拟高并发访问一个脚本:apache安装文件的bin/ab.exe可以模拟并发量 -c 模拟多少并发量 -n 一共请求多少次 http://请求的脚本例如:cmd: apache安装路 ...
- springboot+mybatis+springSecurity+thymeleaf
配置步骤: .pom <dependencies> <dependency> <groupId>org.springframework.security</g ...
- Android深度探索(卷1)HAL与驱动开发 虚拟环境的安装
前言: 最近在看<Android深度探索(卷1)HAL与驱动开发>安装随书带的虚拟环境浪费了很多时间,说是虚拟环境的安装倒不如说是虚拟环境的导入,其实没什么技术含量,也没有什么复杂的,只是 ...
- vue 列表渲染 v-for循环
v-for循环指令类似与html中C标签的循环,同样可以遍历数组,集合. 1.这里演示一下遍历数组的基本用法,代码如下 <!DOCTYPE html> <html> <h ...
- 安装rackspace private cloud --2 overview
Target hosts 包含以下 network bridges: LXC internal lxcbr0: 必须的,自动生成,containers的外网连接,不连接到host上任何物理/逻辑接口, ...
- 执行安装redis报错undefined reference to `__sync_add_and_fetch_4'
执行make命令时报错: zmalloc.o: In function `zmalloc_used_memory': /var/lib/tcommsvr/redis-2.8.0-rc4/src/z ...