【弱省胡策】Round #5 Handle 解题报告
这个题是我出的 sb 题。
首先,我们可以得到:
$$A_i = \sum_{j=i}^{n}{j\choose i}(-1)^{i+j}B_j$$
我们先假设是对的,然后我们把这个关系带进来,有:
$$B_i = \sum_{j=i}^{n}{j\choose i}A_j = \sum_{j=1}^{n}{j\choose i}\sum_{k=j}^{n}{k\choose j}(-1)^{j+k}B_k = \sum_{j=i}^{n}B_j\sum_{k=i}^{j}{j\choose k}{k\choose i}(-1)^{j+k}$$
然后有:
$${j\choose k}{k\choose i} = \frac{j!k!}{k!(j-k)!i!(k-i)!} = \frac{j!(j-i)!}{(j-i)!(j-k)!i!(k-i)!} = {j\choose i}{j - i \choose j - k}$$
故:
$$B_i = \sum_{j=i}^{n}B_j\sum_{k=i}^{j}{j\choose i}{j - i\choose j - k}(-1)^{j+k} = \sum_{j=i}^{n}B_j{j\choose i}\sum_{k=0}^{j-i}{j - i\choose k}(-1)^k$$
又因为从一个非空石子堆中选出奇数个石子和偶数个石子的方案总数是一样的,所以有:
$$\sum_{i=0}^{n}{n\choose i}(-1)^i = [n == 0]$$
故:
$$B_i = \sum_{j = i}^{n}B_j{j\choose i}[i == j] = B_i$$
发现我们构造的这个关系是没有矛盾的,所以就可以用这个关系来算 $A_i$ 了。
我们刚才证明了这个关系的充分性,那么必要性呢?
因为这是一个满秩的 $n$ 元一次方程组,所以有且仅有一组解满足这个关系。
然而我们现在就找到了这样的一组合法解,所以必要性也是显然的。
所以我们可以得到这两组关系互为充分必要条件,也就是等价的。
把式子展开,有:
$$A_i = \sum_{j=i}^{n}\frac{j!(-1)^jB_j}{i!(-1)^i(j-i)!}$$
其中 $\frac{1}{i!(-1)^i}$ 我们可以最后再考虑,然后我们令 $T_i = A_{n-i}\times (n-i)!\times (-1)^{n-i}$,那么有:
$$T_i = \sum_{j=n-i}^{n}\frac{j!(-1)^jB_j}{(j-n+i)!} = \sum_{j=0}^{i}\frac{(n-j)!(-1)^{n-j}B_{n-j}}{(i-j)!}$$
令 $X_i = (n-i)!(-1)^{n - i}B_{n-i}$,$Y_i = \frac{1}{i!}$,那么就有:
$$T_i = \sum_{j=0}^{i}X_j\times Y_{i - j}$$
就可以用 FFT 来算了,算完之后再处理处理就 OK 了。
时间复杂度 $O(n\log n)$。
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
#define N 262144 + 5
#define Mod 998244353
#define g 3 int n, d, len, A[N], Fac[N], Inv[N], X[N], Y[N], Rev[N], e[N]; inline int Inc(int a, int b)
{
return a + b - (a + b >= Mod ? Mod : );
} inline int power(int u, int v)
{
int res = ;
for (; v; v >>= )
{
if (v & ) res = (LL) res * u % Mod;
u = (LL) u * u % Mod;
}
return res;
} inline void Prepare()
{
Fac[] = Inv[] = ;
for (int i = ; i <= n + ; i ++)
Fac[i] = (LL) Fac[i - ] * i % Mod;
Inv[n + ] = power(Fac[n + ], Mod - );
for (int i = n; i; i --)
Inv[i] = (LL) Inv[i + ] * (i + ) % Mod;
} inline void FFT(int *p)
{
for (int i = ; i < len; i ++)
if (Rev[i] > i) swap(p[i], p[Rev[i]]);
for (int k = , s = ; k < len; k <<= , s ++)
for (int i = ; i < len; i ++)
{
if (i & k) continue ;
int t = (i & k - ) << d - s;
int u = (LL) e[t] * p[i + k] % Mod;
p[i] = Inc(p[i], u);
p[i + k] = Inc(p[i], Mod - Inc(u, u));
}
} int main()
{
#ifndef ONLINE_JUDGE
freopen("handle.in", "r", stdin);
freopen("handle.out", "w", stdout);
#endif scanf("%d", &n);
for (int i = ; i <= n; i ++)
scanf("%d", A + i);
Prepare();
for (len = (n + ) << ; len != (len & -len); len += (len & -len)) ;
for (int i = len; i > ; i >>= , d ++) ;
for (int i = ; i <= n; i ++)
{
X[i] = (LL) A[n - i] * Fac[n - i] % Mod * ((i & ) ? Mod - : ) % Mod;
Y[i] = Inv[i];
}
for (int i = , w = power(g, (Mod - ) / len); i < len; i ++)
{
for (int j = ; j < d; j ++)
if ((i >> j) & ) Rev[i] += << (d - j - );
e[i] = !i ? : (LL) e[i - ] * w % Mod;
}
FFT(X), FFT(Y);
for (int i = , Inv_w = power(power(g, (Mod - ) / len), Mod - ); i < len; i ++)
{
X[i] = (LL) X[i] * Y[i] % Mod;
e[i] = !i ? : (LL) e[i - ] * Inv_w % Mod;
}
FFT(X);
for (int i = , Inv_len = power(len, Mod - ); i < len; i ++)
X[i] = (LL) X[i] * Inv_len % Mod * Inv[n - i] % Mod * ((i & ) ? Mod - : ) % Mod;
for (int i = n; ~i; i --)
printf("%d%c", X[i], !i ? '\n' : ' '); #ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
return ;
}
Handle_Gromah
【弱省胡策】Round #5 Handle 解题报告的更多相关文章
- 【弱省胡策】Round #5 Count
[弱省胡策]Round #5 Count 太神仙了. \(DP\)做法 设\(f_{n,m,d,k}\)表示\(n*m\)的矩阵,填入第\(k\)个颜色,并且第\(k\)个颜色最少的一列上有\(d\) ...
- 弱省胡策 Magic
弱省胡策 Magic 求\(n\)个点\(n\)的条边的简单联通图的个数. 毒瘤,还要写高精. 我们枚举环的大小\(k\),\(\displaystyle ans=\sum_{k=3}^nC_n^k ...
- luoguP3769 [CH弱省胡策R2]TATT
luoguP3769 [CH弱省胡策R2]TATT PS:做这题前先切掉 P4148简单题,对于本人这样的juruo更助于理解,当然dalao就当练练手吧 题目大意: 现在有n个四维空间中的点,请求出 ...
- Codeforces Round 665 赛后解题报告(暂A-D)
Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...
- Codeforces Round 662 赛后解题报告(A-E2)
Codeforces Round 662 赛后解题报告 梦幻开局到1400+的悲惨故事 A. Rainbow Dash, Fluttershy and Chess Coloring 这个题很简单,我们 ...
- Codeforces Educational Round 92 赛后解题报告(A-G)
Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...
- 【ContestHunter】【弱省胡策】【Round0】(A)&【Round1】(B)
DP+容斥原理or补集转化?/KD-Tree 唔……突然发现最早打的两场(打的最烂的两场)没有写记录……(太烂所以不忍记录了吗... 还是把搞出来了的两道题记录一下吧= =勉强算弥补一下缺憾…… Ro ...
- Codeforces Round #277.5 解题报告
又熬夜刷了cf,今天比正常多一题.比赛还没完但我知道F过不了了,一个半小时贡献给F还是没过--应该也没人Hack.写写解题报告吧= =. 解题报告例如以下: A题:选择排序直接搞,由于不要求最优交换次 ...
- 【弱省胡策】Round #5 Construct 解题报告
这个题是传说中的 Hack 狂魔 qmqmqm 出的构造题.当然要神. 这个题的本质实际上就是构造一个图,然后使得任意两点间都有长度为 $k$ 的路径相连,然后对于任意的 $i < k$,都存在 ...
随机推荐
- JDK Tools - wsimport: 编译 WSDL 生成 JAX-WS 规范的 Java 类
wsimport 命令是用来编译 wsdl 生成JAX-WS 规范的 Java 类的工具. 命令格式 wsimport [ options ] wsdl 命令参数 -s directory 指定源文件 ...
- ASP实现用年月日时分秒和两位随机数字来作为上传文件名的函数
Public Function GetNewFileName() dim ranNum dim dtNow dtNow=Now() randomize ranNum=int(90*rnd)+10 Ge ...
- 使用 ICharpCode.SharpZipLib 压缩指定目录结构
今天做项目中遇见一个压缩问题,我的目录结构是树形菜单,文件在服务器存储是平面存储,没有目录结构,所以在下载指定目录的时候要构建目录结构,如下: 当我右键点击下载b目录文件夹的时候要Download ...
- powerdesign设置实体显示格式
工具-显示参数选择中,如下图:
- 【JAVA】抽象类
一.什么是抽象类 用abstract修饰的类就是抽象类.抽象类中可以有用abstract修饰的抽象方法,也可以没有抽象方法. 二.为什么要设计抽象类 在某些情况下,某个父类只是知道其子类应该包含怎样的 ...
- transform3D实现翻页效果
---恢复内容开始--- 闲篇 最近升级了下百度音乐,唯一的感觉就是动画效果很炫丽.我不是个对产品很敏感的人,但是这段时间观察一些大厂的产品发现现在的APP越来越重视动画效果了.大家可能没有注意过,连 ...
- 初尝Windows 下批处理编程
本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...
- [.Net MVC] 过滤器以及异常处理
项目:后台管理平台 意义:程序发布后,不应该对用户显示因程序出错和崩溃而出现的错误信息,采用统一友好的错误页面,并将错误信息记录到日志中供管理人员查看. 一.过滤器Filter Filter(筛选器) ...
- 使用FreeMarker生成静态HTML
1.FreeMarker需要添加的Maven依赖: <dependency> <groupId>org.freemarker</groupId> <artif ...
- Java多线程的安全问题
/*多线程的安全问题1.为什么会出现安全问题?因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这时候, ...