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\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块 ...
随机推荐
- MySQL建库建表
一直使用SQL SERVER 数据库:最近项目使用MY SQL感觉还是有一点不适应.不过熟悉之后就会好很多. MY SQL 安装之后会有一个管理工具MySQL Workbench 感觉不太好用,数据库 ...
- Swift 学习- 03 -- 基本运算符
// 运算符是检查,改变,合并值的特殊符号或短语, // swift 支持大部分标准的 C语言的运算符, 且改进许多特性来减少常规编码错误. /* 如: 赋值符 (=) 不返回值, 以防止把想要判断相 ...
- easyui生成合并行,合计计算价格
easyui生成合并行,合计计算价格 注:本文来源: 原创 一:图样你效果图 二:代码实现 1:datagrid 列展示: window.dataGrid = $("#dataGrid&qu ...
- deepin、Ubuntu安装Nginx
deepin安装nginx 切换至root用户 su 密码: 基础库的安装 安装gcc g++的依赖库 sudo apt-get install build-essential && ...
- jquery 中多选和全选
- PYMySQL的注册功能的实现
import pymysql conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root& ...
- CentOS 7 防火墙,端口开启命令
1. 查看已打开的端口 # netstat -anp 2. 查看想开的端口是否已开 # firewall-cmd --query-port=8003/tcp 若此提示 FirewallD is ...
- linux基础实操四
实操一: 1)为新加的硬盘分区,一个主分区大小为10剩余空间给扩展分区,在扩展分区上划分2个逻辑分别为5G 2)式化主分区为ext3系统 #mkfs.ext3 /dev/sdb1 3 将逻辑分区设置为 ...
- php 数组函数学习
1.array_change_key_case array_change_key_case(array,case)函数将数组的所有的键都转换为大写字母或小写字母.array表示目标数组,case表示转 ...
- git无法pull仓库refusing to merge unrelated histories (拒绝合并不相关仓库)
原文地址 https://blog.csdn.net/lindexi_gd/article/details/52554159 本文讲的是把git在最新2.9.2,合并pull两个不同的项目,出现的问题 ...