首页 > 其他分享 >[ARC106F] Figures 题解

[ARC106F] Figures 题解

时间:2024-09-10 21:36:13浏览次数:11  
标签:frac int 题解 sum ARC106F times Figures prod align

生成函数大法好。

思路

考虑 prufer 序列。

如果 \(n\) 个点的度数确定,那么生成树个数为:

\[\frac{(n-2)!}{\prod (d_i-1)} \]

那么在此题中,\(n\) 个点的度数确定,那么方案数为:

\[\frac{(n-2)!}{\prod (d_i-1)}\prod\frac{a_i!}{(a_i-d_i)!} \]

其中,\(\sum d_i=2\times n-2\)。

容易发现这是一个卷积形式。

我们可以将每一个点的贡献拿出来,即 \(\frac{a_i!}{(a_i-d_i)!(d_i-1)}\)。

那么可以设生成函数:

\[f_i(x)=\sum_{j=1}\frac{a_i!x^j}{(a_i-j)!(j-1)} \]

有:

\[\begin{align} f_i(x)&=\sum_{j=1}\frac{a_i!x^j}{(a_i-j)!(j-1)}\\ &=x\sum_{j=0}a_i!\frac{x^j}{(a_i-j+1)!j}\\ &=x\sum_{j=0}a_i\frac{x^j(a_i-1)!}{(a_i-j+1)!j}\\ &=x\sum_{j=0}a_ix^j\binom{a_i-1}{j}\\ &=a_ix\sum_{j=0}x^j\binom{a_i-1}{j}\\ &=a_ix(1+x)^{a_i-1} \end{align} \]

我们要求的是:

\[\begin{align} (n-2)![x^{2\times n-2}]\prod_{i=1}^n a_ix(1+x)^{a_i-1} \end{align} \]

这东西也可以推一下:

\[\begin{align} &=(n-2)![x^{2\times n-2}]\prod_{i=1}^n a_ix(1+x)^{a_i-1}\\ &=(n-2)![x^{n-2}]\prod_{i=1}^n a_i(1+x)^{a_i-1}\\ &=(n-2)!\prod_{i=1}^n a_i\times [x^{n-2}](1+x)^{\sum a_i-n}\\ &=(n-2)!\prod_{i=1}^n a_i\times \binom{\sum a_i-n}{n-2}\\ &=\prod_{i=1}^n a_i\times \prod_{i=0}^{n-3} (\sum a_i-n-i)\\ \end{align} \]

时间复杂度:\(O(n)\)。

Code

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int mod = 998244353;

int n, m, s;
int a[200010];

signed main() {
  cin >> n, s = 1;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++) (m += a[i]) %= mod;
  for (int i = 1; i <= n; i++) (s *= a[i]) %= mod;
  for (int i = 0; i <= n - 3; i++) (s *= (m - n - i)) %= mod;
  cout << (s + mod) % mod << "\n";
}

标签:frac,int,题解,sum,ARC106F,times,Figures,prod,align
From: https://www.cnblogs.com/JiaY19/p/18407270

相关文章

  • CF1672F2 Checker for Array Shuffling 题解
    题目链接点击打开链接题目解法我怎么F1都不会做/llF1:由原始值向最终值连边如果是排列的话,操作次数显然为\(n-\)环数拓展到非排列的情况,即相同数之间的下标可以选择顺序,要求分出来的环数最大直接考虑上面的这东西,让我进入了死胡同。。先给出一个结论:最大环数的最小值是......
  • 【JAVA线上问题解决】JAVA应用程序CPU持续飙高,如何排查问题,如何快速定位问题,解决问题?
    【JAVA线上问题解决】JAVA应用程序CPU持续飙高,如何排查问题,如何快速定位问题,解决问题?场景一、JAVA程序中某个线程占用CPU飙高,问题定位top、jstack命令的使用四步教你快速定位问题代码1.top命令获取异常的java进程PID   top2.查询异常进程中的线程情况,获取异常......
  • [ARC073F] Many Moves 题解
    [ARC073F]ManyMoves题解个人感觉其实还挺套路的题目。不配紫题。对于两个玩意在数轴上跑来跑去这种题目,常见的套路是固定一个点的位置,用另一个点的位置设为状态。对于本题,题目已经帮你固定了一个点,于是我们设\(dp_{x}\)表示一个点在当前要求的位置,另一个点在\(x\)的最小......
  • ABC370 DEF 题解
    ABC370DEF题解赛时过了ABCD,补题的时候发现EF其实也是简单题,为什么就做不出来呢?E这样简单的dp都做不出来,dp必须得多练啊!D-CrossExplosion题目链接对于每一行、列,我们要用一个数据结构来维护未被删除的点,并且要快速找到某一行/列中是否存在某个数,以及查询某个数的前......
  • 「NOI2021 D1T3 庆典」题解
    uoj675加强:\(\sumk\le6\times10^5\)暴力\(u\)在\(s\Rightarrowt\)路径上\(\iff\)正图上\(s\Rightarrowu\)且反图上\(u\Rightarrowt\)时间复杂度\(O((n+m)q)\)正解只关心可达性,不妨SCC缩点成DAG。注意到一个奇怪的条件:对于三座城市\(x,y,z\),若\(x\Right......
  • 题解:[USACO07DEC] Sightseeing Cows G
    洛谷P2868题目大意有个nnn个点,mmm条边的有向图,点有点权,边有边......
  • 力扣474-一和零(Java详细题解)
    题目链接:474.一和零-力扣(LeetCode)前情提要:因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。最近刚学完01背包,所以现在的题解都是以01背包问题为基础再来写的。如果大家不懂01背包的话,建议可以去学一学,01背包问题可以说是背包问题的基础。如果大家感兴趣,......
  • luogu2516题解
    随机说话第一次交的时候写的版本是这个。下面在sum的计算上少了个else,遂出错。以后写的时候还是尽量简单点,主要是调试的时候好调。题目分析题目里面的公共子序列就是可以不连续可以为空的在字符串里出现顺序相同的子串。对于一个公共子序列,在找到最后一个公共的字符的时......
  • P4563 [JXOI2018] 守卫 题解
    P4563[JXOI2018]守卫题解不愧是九条可怜的\(\text{JXOI}\),只能说确实是道好题。假设当前我们在求\([l,r]\),我们不难发现\(r\)端点一定要放保镖,于是考虑\(r\)保镖的最大监视范围\([x,r]\)。由题意得到对于\([x,r]\)中的每个\(p_1,p_2,\cdots,p_k\),要求斜率\(t(p_i,......
  • 树上一些点的选 题解
    题意简述给你一棵\(n\)个节点以\(1\)为根的有根树,和一个整数\(m\)。对于树上每一个点\(u\),有三个权值\(X,Y,Z\)。你需要在\(u\)的祖先里(不含\(u\))中选出至少\(X\)个点,记\(S_1\)表示这些点到\(u\)的距离之和;在\(u\)的后代里(不含\(u\))中选出至少\(Y\)个点,......