原文链接 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. MR1和MR2(Yarn)工作原理流程

    一.Mapreduce1 图1  MR1工作原理图 工作流程主要分为以下6个步骤: 1 作业的提交 1)客户端向jobtracker请求一个新的作业ID(通过JobTracker的getNewJobI ...

  2. linux-history显示历史命令执行时间

    vim  ~/.bashrc 或者 ~/.bash_profile 增加:export HISTTIMEFORMAT="%F %T  " 一次会话的话先执行 然后使用history ...

  3. 部署apache-tomcat环境

    软件体系: C/S:客户端/服务器,例如qq等app都属于C/S体系,除了编写服务端代码还需要编写客户端 优点:展现比较好,客户端会承受一点运算压力,安全性比较好 缺点:更新服务端的同时还需要更新客户 ...

  4. 如何用Axure快速制作APP交互原型

    对于产品经理来说,熟练使用一些常用软件是一项十分必要的技能.其中,作为一个专业的快速原型设计工具,Axure RP无疑在产品人心中拥有一个难以撼动的地位.但就要PS一样,虽然足够专业,但同样也会存在使 ...

  5. 洛谷P4389 付公主的背包 [生成函数,NTT]

    传送门 同样是回过头来发现不会做了,要加深一下记忆. 思路 只要听说过生成函数的人相信第一眼都可以想到生成函数. 所以我们要求 \[ ans=\prod \sum_n x^{nV}=\prod \fr ...

  6. ORACLE in与exists语句的区别

    select * from A where id in(select id from B) 以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与 ...

  7. Confluence 6 缓存性能优化

    Confluence 的运行状态与缓存状态有这密切的关系.针对 Confluence 的管理员来说,尤其是大型站点的 Confluence 管理员,设置好缓存尤其显得关键. 希望修改缓存的大小: 进入 ...

  8. SELinux简介(转载)

    几乎可以肯定每个人都听说过 SELinux (更准确的说,尝试关闭过),甚至某些过往的经验让您对 SELinux 产生了偏见.不过随着日益增长的 0-day 安全漏洞,或许现在是时候去了解下这个在 L ...

  9. gnuradio 创建动态库 libftd3xx.so

    首先还是创建好模块gr-kcd cd gr-kcd 打开CMakeLists.txt cmake_minimum_required(VERSION 2.6) project(gr-kcd CXX C) ...

  10. mysql解决外网不能连接

    mysql解决外网不能连接 Author:SimpleWu 或许有些时候会遇到通过ip地址访问项目的数据库,可是访问失败了. 现在给大家一种解决方案: #进入mysql数据库 USE mysql; # ...