Solution -「LOJ #6485」 LJJ 学二项式定理
\(\mathcal{Description}\)
Link.
给定 \(n,s,a_0,a_1,a_2,a_3\),求:
\]
多测,数据组数 \(\le10^5\),\(n\le10^{18}\),其余输入 \(\le10^8\)。
\(\mathcal{Solution}\)
单位根反演板题。记一个函数 \(f\) 有:
f(x)&=\sum_{i=0}^n\binom{n}is^ix^i\\
&=(sx+1)^n
\end{aligned}
\]
问题即求 \(i\bmod4=0,1,2,3\) 时 \(a_i\) 倍 \([x^i]f(x)\) 之和。以 \(i\bmod4=0\) 为例:
\sum_{i=0}^n[4|i]a_0[x^i]f(x)&=\frac{1}4a_0\sum_{i=0}^n\left(\sum_{j=0}^3\omega_4^{ij}\right)\binom{n}is^i\\
&=\frac{1}4a_0\sum_{j=0}^3f(\omega_4^j)
\end{aligned}
\]
直接代四个单位根进去算出来即可。对于其他三个 \(i\bmod4\) 的值,将 \(f\) 的各系数位移就能类似地求出答案。
复杂度 \(\mathcal O(T\log n)\)(\(\times4^2\) 的常数)。
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
#define rep( i, l, r ) for ( int i = l, repEnd##i = r; i <= repEnd##i; ++i )
#define per( i, r, l ) for ( int i = r, repEnd##i = l; i >= repEnd##i; --i )
typedef long long LL;
inline LL rint () {
LL x = 0, f = 1; char s = getchar ();
for ( ; s < '0' || '9' < s; s = getchar () ) f = s == '-' ? -f : f;
for ( ; '0' <= s && s <= '9'; s = getchar () ) x = x * 10 + ( s ^ '0' );
return x * f;
}
template<typename Tp>
inline void wint ( Tp x ) {
if ( x < 0 ) putchar ( '-' ), x = -x;
if ( 9 < x ) wint ( x / 10 );
putchar ( x % 10 ^ '0' );
}
const int MOD = 998244353, G = 3, INV4 = 748683265;
LL n;
int w[4], s, a[4];
inline int mul ( const long long a, const int b ) { return a * b % MOD; }
inline int add ( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline int mpow ( int a, int b ) {
int ret = 1;
for ( ; b; a = mul ( a, a ), b >>= 1 ) ret = mul ( ret, b & 1 ? a : 1 );
return ret;
}
inline int f ( const int x ) {
return mpow ( add ( mul ( s, x ), 1 ), n );
}
int main () {
w[0] = 1, w[1] = mpow ( G, MOD - 1 >> 2 );
w[2] = mul ( w[1], w[1] ), w[3] = mul ( w[2], w[1] );
for ( int T = rint (); T--; ) {
n = rint () % ( MOD - 1 ), s = rint ();
rep ( i, 0, 3 ) a[i] = rint ();
int ans = 0;
rep ( r, 0, 3 ) {
int res = 0;
rep ( i, 0, 3 ) {
res = add ( res,
mul ( f ( w[i] ), mpow ( w[r * i & 3], MOD - 2 ) ) );
}
ans = add ( ans, mul ( res, a[r] ) );
}
wint ( mul ( ans, INV4 ) ), putchar ( '\n' );
}
return 0;
}
Solution -「LOJ #6485」 LJJ 学二项式定理的更多相关文章
- 【LOJ#6485】LJJ 学二项式定理(单位根反演)
[LOJ#6485]LJJ 学二项式定理(单位根反演) 题面 LOJ 题解 显然对于\(a0,a1,a2,a3\)分开算答案. 这里以\(a0\)为例 \[\begin{aligned} Ans&am ...
- Solution -「LOJ #6029」「雅礼集训 2017」市场
\(\mathcal{Description}\) Link. 维护序列 \(\lang a_n\rang\),支持 \(q\) 次如下操作: 区间加法: 区间下取整除法: 区间求最小值: 区 ...
- Solution -「LOJ #138」「模板」类欧几里得算法
\(\mathcal{Description}\) Link. \(T\) 组询问,每次给出 \(n,a,b,c,k_1,k_2\),求 \[\sum_{x=0}^nx^{k_1}\left\ ...
- Solution -「LOJ #141」回文子串 ||「模板」双向 PAM
\(\mathcal{Description}\) Link. 给定字符串 \(s\),处理 \(q\) 次操作: 在 \(s\) 前添加字符串: 在 \(s\) 后添加字符串: 求 \(s\ ...
- Solution -「LOJ #150」挑战多项式 ||「模板」多项式全家桶
\(\mathcal{Description}\) Link. 给定 \(n\) 次多项式 \(F(x)\),在模 \(998244353\) 意义下求 \[G(x)\equiv\left\{ ...
- Solution -「LOJ #6053」简单的函数
\(\mathcal{Description}\) Link. 积性函数 \(f\) 满足 \(f(p^c)=p\oplus c~(p\in\mathbb P,c\in\mathbb N_+) ...
- 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie
题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1≤r1<l2≤r2≤N,x⨁yx\bigoplus yx⨁y 表示 ...
- 「LOJ#10056」「一本通 2.3 练习 5」The XOR-longest Path (Trie
#10056. 「一本通 2.3 练习 5」The XOR-longest Path 题目描述 原题来自:POJ 3764 给定一棵 nnn 个点的带权树,求树上最长的异或和路径. 输入格式 第一行一 ...
- LOJ6485 LJJ 学二项式定理 解题报告
LJJ 学二项式定理 题意 \(T\)组数据,每组给定\(n,s,a_0,a_1,a_2,a_3\),求 \[ \sum_{i=0}^n \binom{n}{i}s^ia_{i\bmod 4} \] ...
随机推荐
- python中addict模块,设置和读取嵌套字典
源码地址: https://github.com/mewwts/addict/blob/master/README.md
- centos7 配置登录前和登录信息内容
登录之前提示信息: 登录之后提示信息: 上述中,只需修改对应的文件即可. 登录之前: vi /etc/issue 登录之后: vi /etc/motd 补充:将文件内容清空的方法,不是删除. 在前面文 ...
- Python常用功能函数系列总结(七)
本节目录 常用函数一:批量文件重命名 常用函数一:批量文件重命名 # -*- coding: utf-8 -*- """ DateTime : 2021/02/08 10 ...
- vue备用
handleCheck (item) { if (item.isChecked) { this.checkData.push(item.id) this.checkData = _.uniqWith( ...
- 灵雀云入选Gartner 2020中国ICT技术成熟度曲线报告,容器技术处于顶峰
近日,全球权威咨询分析机构Gartner发布了"2020中国ICT技术成熟度曲线(Hype Cycle for ICT in China, 2020 )"报告,灵雀云作为国内容器和 ...
- 无聊的周末用Java写个扫雷小游戏
周末无聊,用Java写了一个扫雷程序,说起来,这个应该是在学校的时候,写会比较好玩,毕竟自己实现一个小游戏,还是比较好玩的.说实话,扫雷程序里面核心的东西,只有点击的时候,去触发更新数据这一步. Sw ...
- c++智能指针的使用,shared_ptr,unique_ptr,weak_ptr
c++智能指针的使用 官方参考 普通指针的烦恼:内存泄漏,多次释放,提前释放 智能指针 负责自动释放所指向的对象. 三种智能指针 shared_ptr,unique_ptr,weak_ptr: 将sh ...
- 【Java】java基础
文章目录 Java基础 1 注释.标识符.关键字 1.1 注释 1.2 关键字 1.3 标识符 1.4 数据类型 1.4.1 基本类型 1.4.2 引用类型 1.4.3 整数类型拓展 1.4.4 浮点 ...
- Fio使用和结果分析
感谢,参考自:https://blog.51cto.com/qixue/1906768: 官方说明文档,很有用:https://fio.readthedocs.io/en/latest/index.h ...
- 【小记录】arm64下的原子加
1.代码中使用atomic_add aarch64下面并没有任何关于atomic的头文件 编译出现错误: /Users/ahfu/code/android/android-ndk-r14b/toolc ...