原文链接 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 动态规划 多项式的更多相关文章

  1. AtCoder Dwango Programming Contest V E

    题目链接:https://dwacon5th-prelims.contest.atcoder.jp/tasks/dwacon5th_prelims_e 题目描述: 给定一个大小为\(N\)的数组\(A ...

  2. Atcoder Dwango Programming Contest V

    模拟,做了ABC三题. D难一些,就不会了. 中规中矩的吧... Atcoder DPCV B 题意:给一个序列,求出所有的子串和中AND值最大的k个数的AND. 思路:既然要求AND,那么肯定按位考 ...

  3. 【AtCoder】Dwango Programming Contest V题解

    A - Thumbnail 题意简述:给出N个数,找出N个数中和这N个数平均值绝对值最小的数 根据题意写代码即可= = #include <bits/stdc++.h> #define f ...

  4. Dwango Programming Contest V 翻车记

    A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  5. [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

    [AtCoder] NIKKEI Programming Contest 2019   本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...

  6. [AtCoder] Yahoo Programming Contest 2019

    [AtCoder] Yahoo Programming Contest 2019   很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ...

  7. AtCoder NIKKEI Programming Contest 2019 E. Weights on Vertices and Edges (并查集)

    题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e 题意:给出一个 n 个点 m 条边的无向图,每个点和每 ...

  8. AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)

    题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 a ...

  9. atcoder NIKKEI Programming Contest 2019 E - Weights on Vertices and Edges

    题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块 ...

随机推荐

  1. 修改SIP协议中的User-Agent名称

    修改目的:如果user-agent 带上了 GIT 版本信息,容易被人抓住版本漏洞针对性的攻击. 示例如下: SIP/2.0 100 Trying Via: SIP/2.0/UDP 192.168.5 ...

  2. poll & select

    //todo /* * copied from http://devarea.com/linux-io-multiplexing-select-vs-poll-vs-epoll/#.W1GZ0vkzZ ...

  3. Laravel 5.2--git冲突error: Your local changes to the following files would be overwritten by merge:

    今天在服务器上git pull是出现以下错误: error: Your local changes to the following files would be overwritten by mer ...

  4. MYSQL事务处理失效原因

    mysql有多种存储引擎,有些版本(mysql5.5.5以前默认是MyISAM,mysql5.5.5以后默认是InnoDB)安装时默认的存储引擎是MyISAM,而MyISAM存储引擎是不支持事务处理的 ...

  5. CodeCraft-19 and Codeforces Round #537 (Div. 2) 题解

    传送门 D. Destroy the Colony 首先明确题意:除了规定的两种(或一种)字母要在同侧以外,其他字母也必须在同侧. 发现当每种字母在左/右边确定之后,方案数就确定了,就是分组的方案数乘 ...

  6. Cropper.js使用笔记

    官网:https://fengyuanchen.github.io/cropperjs/ github:https://github.com/fengyuanchen/cropperjs 由于文档不好 ...

  7. Confluence 6 数据库整合有关你数据库的大小写敏感问题

    'Collation' 是数据如何被存储和比较的规则.大小写是否敏感是有关字符集设置的一个方面.其他大小写敏感的方面有 kana (Japanese script)和宽度(单字节对比双字节长度). 设 ...

  8. Guideline 5.2.1 - Legal - Intellectual Property 解决方案

    最近在上架公司公司项目的时候遇到这个问题什么5.2.1 然后去了解发现最近不少人都遇到了这个问题.先说一下 我上架的APP是一个医疗的APP然后说需要什么医疗资质,估计是账号的公司资质不够吧.后面和苹 ...

  9. JPA整合Spring案例

    目录 Spring-SpringMVC-JPA整合案例 三种整合方式 Spring整合JPA步骤 解决JPA懒加载问题 Spring-SpringMVC-JPA整合案例 author :SimpleW ...

  10. 基于DBUtils实现数据库连接池

    小知识: 1.子类继承父类的三种方式 class Dog(Animal): #子类 派生类 def __init__(self,name,breed, life_value,aggr): # Anim ...