#dp#CF1437F Emotional Fishermen
分析
有些数是固定的,而其它数可以根据这些固定的数而随意排列,将原序列排序后,当小于等于 ,但大于 时,它只能放在 前一个固定数之后,那么我们考虑枚举上一个固定数 ,那么它就能产生 的贡献,可以前缀和优化到
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
const int mod=998244353,N=5011;
int n,fac[N],inv[N],a[N],dp[N],s[N];
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
int main(){
n=iut(),fac[0]=inv[0]=fac[1]=inv[1]=1;
for (int i=1;i<=n;++i) a[i]=iut();
sort(a+1,a+1+n);
if (2*a[n-1]>a[n]) return !printf("0");
for (int i=2;i<=n;++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for (int i=2;i<=n;++i) fac[i]=1ll*fac[i-1]*i%mod,inv[i]=1ll*inv[i]*inv[i-1]%mod;
dp[0]=1,s[0]=fac[n-1];
for (int i=1,len=1;i<=n;++i){
while (2*a[len]<=a[i]&&len<=n) ++len;
dp[i]=1ll*inv[n-len]*s[len-1]%mod;
s[i]=(s[i-1]+1ll*fac[n-1-len]*dp[i])%mod;
}
return !printf("%d",dp[n]);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2024-02-27 #分块,二分#洛谷 3863 序列
2022-02-27 #排列组合,背包#CF232B Table
2022-02-27 #树形dp,直径#51nod 1812 树的双直径