当前位置: 首页 > news >正文

P4561 [JXOI2018] 排序问题

题目

自己写的必须要写题解啊!

先考虑什么是期望轮数。

显然可以从样例观察到。

轮数的概率 \(P\) 是知道的(为 \(\frac {合法的}{总数}\)),且每次操作都是独立的(合法表示 \(b\) 有序可以结束算法)。

那么若第一次就成功次数为 \(1\)

若第一次失败,那么由于操作是独立的,那么期望次数任然为 \(E\)

\(\therefore E=1+(1-P)*(E-1)\)

\(\therefore E= \frac {1}{P}\)

所以期望为 \(\frac {总数}{合法的}\)

而我们要求 \(E\) 最大,也就是合法的尽量少。

考虑怎么样是合法的。

若一个数 \(x\) 出现了 \(y\) 次,那么它在匹配时可以随便排所以 \(x\) 的合法匹配为 \(y!\)

所以合法的总数为 \(\prod_{}{cnt_{a_{i}}!}\)

而设现在贡献为 \(sum\),若对于两个数次数一样为 \(cnt\),给两个分别加 \(1\) 的话,\(sum \gets sum \times (cnt+1) \times (cnt+1)\),若只加一个,\(sum \gets sum \times (cnt+1) \times (cnt+2)\)

观察到给两个分别加 \(1\) 是更优的(其他情况同理)。

那么直接贪心加给小的次数。

注意对于不在 \([l,r]\) 的值次数为 \(0\)

还有这道题似乎卡 unordered_map,直接用 map 更快。

所以为什么我跑这么慢啊?

code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i,l,r) for(ll i=(l);i<=(r);++i)
#define per(i,r,l) for(ll i=(r);i>=(l);--i)const ll N=1e6+5,M=2e7+5,mod=998244353;
ll n,m,l,r;
ll a[N],fac[M],inv[M];
ll pom(ll x,ll y){ll res=1;for(;y;y>>=1,x=x*x%mod) if(y&1) res=res*x%mod;return res;}
map<ll,ll>cnt;
map<ll,ll>mp;
void solve(){cnt.clear();mp.clear();cin>>n>>m>>l>>r;ll mm=r-l+1;rep(i,1,n){cin>>a[i];if(!cnt[a[i]]++&&l<=a[i]&&a[i]<=r) --mm;}ll all=fac[n+m],sum=1,gs=0;for(auto u:cnt){sum=sum*fac[u.second]%mod;if(l<=u.first&&u.first<=r) mp[u.second]++;}if(mm) mp[0]=mm;auto v=mp.begin();auto calc=[](ll k,ll a,ll b){return pom(fac[b+(k/a)]*inv[b]%mod,a)%mod*pom(b+(k/a)+1,k%a)%mod;};for(auto u:mp){if(!m) continue;gs+=u.second;if(++v==mp.end()){sum=sum*calc(m,gs,u.first)%mod;}else{ll d=min(m,gs*(v->first-u.first));sum=sum*calc(d,gs,u.first)%mod;m-=d;}}cout<<all*pom(sum,mod-2)%mod<<'\n';
}
int main(){cin.tie(0)->ios::sync_with_stdio(false);fac[0]=1;rep(i,1,M-1) fac[i]=fac[i-1]*i%mod;inv[M-1]=pom(fac[M-1],mod-2);per(i,M-2,0) inv[i]=inv[i+1]*(i+1)%mod;ll T=1;cin>>T;while(T--) solve();return 0;
}
http://www.jsqmd.com/news/615003/

相关文章:

  • version attribute在html中必要吗_DOCTYPE替代说明【说明】
  • 知识点解释(1.1)
  • 不记命令也能排障:catpaw chat 实战手册俟
  • 贾子科学体系TMM三层结构定律全解:终结方法霸权,重构科学的“操作系统”
  • 2026届毕业生推荐的五大降重复率助手解析与推荐
  • 从田间到大屏只要1.8秒:PHP异步任务队列+Redis流式渲染农业可视化看板(实测QPS 1270+)
  • 如何在数据库中直接修改WordPress页面的发布时间_post_date编辑
  • OpenClaw 太难装了?试试 LangTARS:一行命令部署 + WebUI 管理面板,还能接入 Dify/Coze/nn??悠
  • PHP 8.9错误处理增强配置全解密(RFC #8721官方未公开的6个兼容陷阱)
  • 如何利用Prosurfactant蛋白C重组兔单抗研究肺发育机制?
  • 月入3W+!Java+YOLO接单变现全指南:10个可直接落地的AI视觉项目,全场景覆盖
  • 案例分析:学术文献综述 Agent Harness
  • 【Loom生产环境禁用清单】:这7个Spring Boot自动配置项正在 silently 杀死你的虚拟线程吞吐量
  • 为什么你的filter_var()在病历脱敏中彻底失效?——PHP 8.2+医疗场景下5类脱敏配置的权威基准测试报告
  • ARM 架构 JuiceFS 性能优化:基于 MLPerf 的实践与调优死
  • Shell核心基础命令(下)——系统与权限操作
  • 【R 4.5量化回测终极指南】:零基础3小时跑通完整策略回测 pipeline(含实盘级风控模块)
  • WSL+Ollama 开机自启终极配置,本地大模型永不掉线
  • C语言是什么(非常详细)
  • Linux常用性能分析工具--Top【转载】
  • 凌晨 6 点,裁员 3 万:AI时代最残酷的一幕来了
  • 仅限首批200名开发者获取:Java 25虚拟线程高并发架构迁移评估工具包(含代码扫描器+风险热力图+ROI预测模型)
  • Shell变量与环境变量(自定义配置,灵活复用)
  • AI 编程的“隐形门槛”:为什么别人效率翻倍,你却还在原地踏步?
  • DotNetPy:现代.NET 与 Python 互操作 实战指南延
  • 突破限制:开源工具实现Cursor全功能访问的完整指南
  • ​有机溶剂回收设备厂家实测
  • 20254203 2025-2026-2 《Python程序设计》实验二报告
  • 边缘计算与AI推理:在终端设备上部署模型的挑战
  • 环境变量-代理/PowerShell乱码