AtCoder [Dwango Programming Contest V] E 动态规划 多项式
原文链接 https://www.cnblogs.com/zhouzhendong/p/AtCoder-Dwango-Programming-Contest-V-E.html
题意
有 $n$ 个数,第 $i$ 个数为 $a_i$ ,对于任意一个 $1,2,\cdots ,n$ 的排列 $P$ ,如果将所有边 $(i,P_i)$ 相连,那么必然得到一些环。定义函数 $f(P)=\prod_{r 是 P 中的一个环} r 中最小的 a_i 值$ 。定义 $S(i)=\sum_{P代表i 个环} f(P)$ ,求 $\gcd(S(1),S(2),\cdots ,S(n))$ 。
题解
好久没发博客了。我的退役生活被 10 门丰富多彩的学科暴虐。
首先将 $a_i$ 升序排列。
设 $dp[i][j]$ 为前 $i$ 个数分成 $j$ 个环对答案的贡献。
那么
$$dp[i][j] = dp[i-1][j]\times (i-1) + dp[i-1][j-1] \times a_i$$
其中初始值为 $dp[0][0]=1$ 。
则题目要求的就是 $\gcd(dp[n][1],dp[n][2],\cdots ,dp[n][n])$ 。
设 $g_k(x) = \sum_{i=0}^{n} dp[k][i] x^i$,则有 $g_{k+1}(x) = (k+a_{k+1}x)g_k(x)$ 。
即 $g_n(x) = \prod_{i=0}^{n-1} (i+a_{i+1}x)$ 。
引理
设 $P,Q$ 为多项式,定义函数 $G(P)=\gcd(P_0,P_1,\cdots)$ ,其中 $P_i$ 为多项式 $P$ 的 $i$ 次项。那么,必然有 $G(PQ) = G(P)G(Q)$ 。
证明上面的引理,只需要转化成一个显然的引理即可:
若 $G(P) = G(Q) = 1$,则 $G(PQ) = 1$ 。
引理完
于是最终答案就是 $\prod_{i=0}^{n-1} \gcd(i,a_{i+1})$ 。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=100005,mod=998244353;
int n,a[N];
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(){
cin >> n;
for (int i=0;i<n;i++)
cin >> a[i];
sort(a,a+n);
int ans=1;
for (int i=0;i<n;i++)
ans=1LL*ans*gcd(a[i],i)%mod;
cout << ans;
return 0;
}
AtCoder [Dwango Programming Contest V] E 动态规划 多项式的更多相关文章
- AtCoder Dwango Programming Contest V E
题目链接:https://dwacon5th-prelims.contest.atcoder.jp/tasks/dwacon5th_prelims_e 题目描述: 给定一个大小为\(N\)的数组\(A ...
- Atcoder Dwango Programming Contest V
模拟,做了ABC三题. D难一些,就不会了. 中规中矩的吧... Atcoder DPCV B 题意:给一个序列,求出所有的子串和中AND值最大的k个数的AND. 思路:既然要求AND,那么肯定按位考 ...
- 【AtCoder】Dwango Programming Contest V题解
A - Thumbnail 题意简述:给出N个数,找出N个数中和这N个数平均值绝对值最小的数 根据题意写代码即可= = #include <bits/stdc++.h> #define f ...
- Dwango Programming Contest V 翻车记
A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...
- [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)
[AtCoder] NIKKEI Programming Contest 2019 本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...
- [AtCoder] Yahoo Programming Contest 2019
[AtCoder] Yahoo Programming Contest 2019 很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ...
- AtCoder NIKKEI Programming Contest 2019 E. Weights on Vertices and Edges (并查集)
题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e 题意:给出一个 n 个点 m 条边的无向图,每个点和每 ...
- AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)
题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 a ...
- atcoder NIKKEI Programming Contest 2019 E - Weights on Vertices and Edges
题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块 ...
随机推荐
- Light OJ 1020
简单推理题: #include<bits/stdc++.h> using namespace std; int main() { int T, n; string Name; cin &g ...
- HDU 4549
水题: 费马小定理+快速幂+矩阵快速幂 (第一次用到费马小定理) #include<bits/stdc++.h> using namespace std; typedef long lon ...
- Spring加载加密的配置文件
一.继承并实现自己的属性文件配置器类 /** * 带加密的Spring属性配置文件扩展类 * 加密方式:AES * @author simon * */ public class EncryptPro ...
- Float与二进制之间的转化(Java实现)
在线转化:http://www.binaryconvert.com import java.text.DecimalFormat; public class SinglePrecision { //浮 ...
- js——字符串处理
字符串不能修改,所以修改后的结果都是以一个新的字符串返回,原串不改变 1. 创建字符串和typeof - 空字符串 var str = ""; - " ...
- kotlin学习笔记-异常好玩的list集合总结
不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = "12_12_13_15_a_b_c_d_yu_ ...
- java+appium 自动化环境搭建
1.安装JDK1.7及以上 2.下载解压sdk并且配置环境变量: ANDROID_HOME:...\adt-bundle-windows-x86_64-20140702\sdk PATH:%ANDRO ...
- ES6学习路上的小学生,promise处理异步操作,简易原始起步之用。先能用,再深究!
ES6的promise对象,让我们更容易的处理这样的需求:执行完一个方法以后,再去执行下一个方法. 理解尚浅之时,先用于项目之中. var promise1 = new Promise(functio ...
- 【linux】Linux误删C基本运行库libc.so.6急救方法
转自:http://www.cnblogs.com/fjping0606/p/4551475.html 下面全文都是拷贝的上面链接的内容. 首先普及一下关于libc.so.6的基本常识: libc.s ...
- Nginx详解十八:Nginx深度学习篇之Rewrite规则
Rewrite规则可以实现对url的重写,以及重定向 作用场景: 1.URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等 2.SEO优化 3.维护:后台维护.流量转发等 4.安全 配置语 ...