Cyclic GCDs

题面

【题目描述】

给定一个长为 \(N\) 的序列 \(a_1,a_2,\dots,a_N\)。

设一个置换 \(p\) 的价值 \(f(p)\) 为每个轮换中最小的 \(a_i\) 的乘积。

设 \(b_i\) 为有 \(i\) 个轮换的所有置换 \(p\) 的 \(f(p)\) 之和。

求 \(\gcd(b_1,b_2,\dots,b_N) \bmod{998244353}\)。

【数据范围】

\(1\le N\le10^5\),\(1\le a_i\le10^9\)。

【样例输入】

4

2 5 2 5

【样例输出】

2

题解

抽象的证明,美妙的公式,好一道数学题。

首先,对整个序列划分轮换,不就是将其分为 \(k\) 个不交集合吗?

其次,要求每个集合中的最小值,不就等于将序列从小到大排序后取划分左端点吗?

如此,我们考虑一个函数 \(F_{i,j}\) 表示前 \(i\) 个数划分为 \(j\) 个集合的价值之积的和,则 \(F_{n, i} = b_i = \sum f(p)\),有如下式子:

\[F_{i,j} = a_i \times F_{i-1,j-1} + (i - 1) \times F_{i-1,j}
\]
  • 如果新加入一个数,自成一个轮换,那么对 \(f(p)\) 贡献一个 \(a_i\) 的乘积,我们得到了 \(a_i \times F_{i-1,j-1}\) 这个式子。

  • 如果新加入一个数,插入其他轮换,那么前面 \(i - 1\) 个数有 \(i - 1\) 个位置可供插空,则对 \(b_i\) 贡献一个所有满足条件的置换之和,我们得到了 \((i - 1) \times F_{i-1,j}\) 这个式子。

这个式子和斯特林数十分相似,我们考虑引入 \(G_i(x) = \sum\limits_{j = 0}^n F_{i,j}x^i\) 这个生成函数。

明显的,我们可以使用形式幂级数代换原递推式得到:

\[[x^j]G_i(x) = [x^{j-1}]a_iG_{i-1}(x) + [x^{j}](i - 1)G_{i-1}(x)
\]

根据幂形式的性质,给 \(j-1\) 次项乘上 \(x\) 可以得到等幂式,又可以缩回我们的生成函数,即:

\[\begin{aligned}
G_i(x) &= a_ixG_{i-1}(x) + (i - 1)G_{i-1}(x)\\
&= (a_ix + i - 1)G_{i-1}(x)
\end{aligned}
\]

而 \(G_n(x)\) 便是我们需要求得的 \(n\) 元 \(j\) 次划分贡献的生成函数。

于是我们有:

\[\begin{aligned}
G_n(x) &= (a_nx + n - 1)G_{n-1}(x)\\
&= (a_nx + n - 1)(a_{n-1}x + n - 2)G_{n-2}(x)\\
&= (a_nx + n - 1)(a_{n-1}x + n - 2)...(a_2x - 1)a_1\\
&= \prod_{i = 1}^n (a_ix + i - 1)
\end{aligned}
\]

而 \(b_i = [x^i]G_n(x)\),我们想求 \(\gcd(b_1,b_2,...,b_n) = \gcd\limits_{i = 1}^n [x^i]G_n(x)\),很自然的联想到在 \(G_n(x)\) 上下手。

设 \(m = \gcd\limits_{i = 1}^n [x^i]G_n(x)\)。

我们考虑将其因式分解,有 \(G_n(x) = m(c_1x + d_1)(c_2x + d_2)...(c_nx + d_n)\)。

对于任一 \([x^i]G_n(x)\),我们总能得到 \(m \times P\),\(P\) 为不能再分解的因式,因此我们得到 \(\gcd(b_1,b_2,...,b_n) = m\)。

而根据 \(m = \prod\limits_{i=1}^n \gcd(a_i, i - 1)\),我们得出结论:

\[\gcd(b_1,b_2,...,b_n) = \prod\limits_{i=1}^n \gcd(a_i, i - 1)
\]
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, mod = 998244353;
int n, a[N], ans = 1;
int main()
{
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i ++ ) ans = 1ll * ans * __gcd(a[i], i - 1) % mod;
cout << ans;
return 0;
}

[ATCoder] Cyclic GCDs - 神圣的数学题的更多相关文章

  1. Cyclic GCDs

    Cyclic GCDs 题目链接 题面描述 有\(n\)个点,每个点有权值. 现有排列\(P\),\(p_i\)表示\(i\)个点向\(p_i\)连了一条边. 显然会形成若干个简单环.每个简单环的权值 ...

  2. 【AtCoder】Dwango Programming Contest V题解

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

  3. 2018.07.20 atcoder Largest Smallest Cyclic Shift(贪心)

    传送门 题意:给你x个a,y个b,z个c,显然这些字符可以拼成若干字符串,然后求这些字符串中最小表示法表示出来的最大的那一个. 解法:贪心思想,用multiset维护现在拼成的字串,每次取一个最小的和 ...

  4. [Atcoder Code Festival 2017 Qual B Problem F]Largest Smallest Cyclic Shift

    题目大意:给你\(A\)个a,\(B\)个b,\(C\)个c,要你构造一个字符串,使它的最小循环表示法最大.求这个表示法.解题思路:不知道怎么证,但把a.b.c当做单独的字符串扔进容器,每次把字典序最 ...

  5. AtCoder 杂题训练

    前言: 因为要普及了,今年没一等就可以退役去学文化课了,所以暑假把历年noip普及组都刷了一遍,离noip还有50+天,想弄点强化训练什么的. 想了想,就这些天学文化课之余有空就把AtCoder之前那 ...

  6. Largest Smallest Cyclic Shift

    Largest Smallest Cyclic Shift 题目来源: Atcoder Code Festival 2017 Qual B Problem F 题目大意: 有\(X\)个字符'a',\ ...

  7. ytu 2558: 游起来吧!超妹!(水题,趣味数学题)

    2558: 游起来吧!超妹! Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 7  Solved: 3[Submit][Status][Web Board ...

  8. Codeforces Round #385 (Div. 2) A. Hongcow Learns the Cyclic Shift 水题

    A. Hongcow Learns the Cyclic Shift 题目连接: http://codeforces.com/contest/745/problem/A Description Hon ...

  9. codeforces 709C C. Letters Cyclic Shift(贪心)

    题目链接: C. Letters Cyclic Shift 题意: 现在一串小写的英文字符,每个字符可以变成它前边的字符即b-a,c-a,a-z这样,选一个字串变换,使得得到的字符串字典序最小; 思路 ...

  10. sdut 2416:Fruit Ninja II(第三届山东省省赛原题,数学题)

    Fruit Ninja II Time Limit: 5000MS Memory limit: 65536K 题目描述 Have you ever played a popular game name ...

随机推荐

  1. 组合逻辑环(Combinational Logic Loop)

    组合逻辑电路 组合逻辑电路是数字电子学中一类基本的电路类型,它由一系列逻辑门组成,用于实现特定的逻辑功能.与时序逻辑电路不同,组合逻辑电路的输出完全取决于当前的输入信号,而不受之前输入的影响.换句话说 ...

  2. chezmoi 使用

    chezmoi(发音 /ʃeɪ mwa/ (shay-moi)):在多台不同的机器上安全地管理你的 dotfiles. 安装 macOS: brew install chezmoi Ubuntu: s ...

  3. react + vite

    Vite 和 Yarn都比较新的技术 Ref: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-react-proje ...

  4. 十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)

    十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式) @ 目录 十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式) 1. Spring Boot 配置 M ...

  5. logisim学习感想(持续更新)

    状态机类型 存在两种类型的状态机,分别为mealy型状态机和moore型状态机,在实验中,二者的大体实现如下: 其中从输入到输出的连线只有mealy状态机才有,而moore型则无此线. 区分两种类型的 ...

  6. 利用 ACME 实现SSL证书自动化配置更新

    最近收到腾讯云的通知SSL证书要到期了,本想直接申请的发现现在申请的免费SSL证书有效期只有90天了,顺便了解了一下原因是包括Google在内的国际顶级科技公司一直都有在推进免费证书90天有效期的建议 ...

  7. js 中必须加分号的位置集合

    1. 匿名函数(自执行函数)(function (){}()) 2. 解析赋值    2 个变量交换位置

  8. 如何解决使用 router.push 跳转路由第二次之后页面就不会刷新了

    router.push({ name:"monitor", query:{ deviceid:"1676156672197922816", // 设备 ID i ...

  9. 65.说下vue3的使用感想(说些vue3对比vue3的方便之处)

    vue3 使用了组合式API,setup 替换了选项式api ,不需要在多个api里面写代码了,而且使用了setup的语法糖,可以更加方便写代码 : vue3使用proxy替代了Object.defi ...

  10. 00 你想要学习的 AI+Python,捷径在这里

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...