zyxzyx100219 @ 2024-11-28 13:39:48
题目描述
有 𝑛 堆果子,分别有 𝑎1 , 𝑎2 , ⋯ , 𝑎𝑛 个果子。一次合并分为有顺序的 𝑛 − 1 步,每一步选择两堆果子,合并成一堆。
定义一次合并的权值为每一步被合并的两堆果子数量之积的和。求出每一种合并方法的权值之和对998244353取模的结果。
两种合并方式不同当且仅当有一步被合并的两堆不同。即使有两堆的果子数量相同,我们仍然把它们视为不同的两堆。
输入格式
第一行一个正整数 𝑛。 第二行 𝑛 个非负整数,依次表示 𝑎1 , ⋯ , 𝑎𝑛。
输出格式
一行一个非负整数,表示所有合并方法权值之和(对 998244353 取模)。
样例
样例输入1 2
100001 100002
样例输出1
17856472
样例解释1
只能合并 1 步,即合并仅有的两堆。 两堆果子数量之积为 100001 ∗ 100002 = 10000300002, 对 998244353 取模的结果为 17856472。
注意合并 (𝐴, 𝐵) 和 (𝐵, 𝐴) 视为相同的合并方式。
样例输入2
3
1 2 3
样例输出2
33
by zyxzyx100219 @ 2024-11-28 15:41:30
@Mr_Az 啊没有啊
by acb437 @ 2024-11-28 17:25:29
模拟赛 T1?方案数是
by acb437 @ 2024-11-28 17:26:39
@zyxzyx100219 自己思考一下,每次选两堆合并,又是有顺序的,所以直接组合数累乘就可以了。
by zyxzyx100219 @ 2024-11-28 17:38:17
@acb437 式子对了。。大样例不对
by acb437 @ 2024-11-28 17:52:42
@zyxzyx100219 注意取模和 long long。你每一种方案的贡献算对了吗?代码发出来看看。
by zyxzyx100219 @ 2024-11-28 17:56:57
#include<bits/stdc++.h>
using namespace std;
long long a[100001];
long long fans[100001];
int n;
int mod=998244353;
int main()
{
//freopen("fft.in","r",stdin);
//freopen("fft.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
long long ans=0;
for(int i=1;i<n;i++)
{
long long x=a[i]*a[i+1]%mod;
a[i+1]+=a[i];
a[i+1]%=mod;
ans+=x;
ans%=mod;
}
fans[1]=1;
fans[2]=1;
fans[3]=3;
for(int i=4;i<=n;i++)
{
fans[i]=fans[i-1]*((i*(i-1))/2%mod);
fans[i]%=mod;
}
ans%=mod;
cout<<ans*fans[n]%mod;
return 0;
}
by zyxzyx100219 @ 2024-11-28 17:57:15
@acb437
by acb437 @ 2024-11-28 18:26:11
@zyxzyx100219
算 fans
的循环
by acb437 @ 2024-11-28 18:27:24
// ubsan: undefined
// accoders
#include<bits/stdc++.h>
using namespace std;
long long a[100001];
long long fans[100001];
int n;
int mod=998244353;
int main()
{
freopen("fft.in","r",stdin);
freopen("fft.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
long long ans=0;
for(int i=1;i<n;i++)
{
long long x=a[i]*a[i+1]%mod;
a[i+1]+=a[i];
a[i+1]%=mod;
ans+=x;
ans%=mod;
}
fans[1]=1;
fans[2]=1;
fans[3]=3;
for(int i=4;i<=n;i++)
{
fans[i]=fans[i-1]*((1ll*i*(i-1))/2%mod); //这里
fans[i]%=mod;
}
ans%=mod;
cout<<ans*fans[n]%mod;
return 0;
}
by zyxzyx100219 @ 2024-11-28 18:41:41
@acb437 谢谢dalao ORZ ORZ