尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【题解】P13345 [EGOI 2025] IMO

【题解】P13345 [EGOI 2025] IMO
📅 发布时间:2026/6/22 8:49:20

先把最终的排名给弄出来,然后就在从高到低排好序的 \(a\) 数组上来看。

我们显然只需要考虑相邻排名的选手之间的限制。

\(f_{i,j}\) 表示考虑了前 \(i\) 名选手,且第 \(i\) 名选手的得分最小值为 \(j\) ,最小的答案。

为了实现转移,我们需要知道每个选手能够弄出什么样的得分。每个选手最终的分布都可以用 “确定的得分和、隐藏得分的题目个数” 这样的二元组来表示。

对于第 \(i\) 名选手,使用 \(g_{j,t,p}\) 表示考虑了前 \(j\) 道题,当前确定的得分和为 \(t\) ,隐藏得分的题目个数为 \(p\) ,这种情况是否可行。转移很容易,只需决策当前这道题是否隐藏即可。

回到 \(f\) 的转移,枚举 \(i\) 、第 \(i\) 位选手的得分下界 \(j\) ,以及该选手隐藏的题目个数 \(num\) 。

得分下界 \(j\) 其实就是“当前确定的得分和”,此时第 \(i\) 位选手的得分上界即为 \(j+num\times k\),只需第 \(i-1\) 位选手的得分下界比第 \(i\) 位选手的得分上界更大即可。注意这里“更大”需要比较是否 \(i\) 与 \(i-1\) 原始编号的大小,这会影响两人得分能否相同。

来看看复杂度,使用 bitset 可以将 \(p\) 这一维压掉。\(f\) 的状态数是 \(n\times mk\) ,转移 \(m\) ;对于每个 \(i\), \(g\) 的状态数 \(m\times mk\times m\) ,\(O(1)\) 转移,bitset 优化可以去掉一个 \(\omega\) 。这么来看复杂度大概是 \(O(n\log n+nm^2k+nm^3k/\omega)\) ,可以获得 \(72\text{pts}\) 。

但是状态真的有这么大吗??记 \(sum_i\) 为第 \(i\) 人的原始得分总和。对于 \(f_{i,j}\) ,\(j\) 这一位的取值只能取 \([sum_{i+1},sum_{i}]\) 中,否则 \(j\) 太小第 \(i+1\) 人就没法填了。故 \(f\) 的状态数为 \(\sum_{i=1}^n (sum_i-sum_{i+1})\) 。而且转移也不需要 \(O(m)\) ,只需计算 \(p\in[0,(sum_{i-1}-sum_{i+1})/k]\) 的值。计算 \(f\) 的复杂度变为 :

\( \sum_{i=1}^n (sum_i-sum_{i+1})(sum_{i-1}-sum_{i+1})/k\leq \sum_{i=1}^n(sum_{i-1}-sum_{i+1})^2/k=O(m^2k) \) 。

然后再看 \(g\) ,对于给定的 \(i,j\) ,并不是所有的 \(t\) 都有用。记 \(d=sum_{i}-sum_{i+1}\) ,最终 \(j=m\) 时 \(t\) 的取值为 \([sum_{i+1},sum_i]=[sum_i-d,sum_i]\),因此对于每个 \(j\) 作转移时,只用计算最大 \(d\) 个有用的 \(t\) 。计算 \(g\) 的复杂度为 \(O(\sum_{i=1}^n (sum_i-sum_i+1)\times m\times m/\omega)=O(m^3k/\omega)\) 。

总复杂度 \(O(n\log n+m^2k+m^3k/\omega)\)。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read(){ll x=0; bool f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=0; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48); ch=getchar();}return f?x:-x;
}
inline void write(ll x){if(x<0) x=-x,putchar('-');if(x>9) write(x/10);putchar('0'+x%10);
}
const ll N=20009;
const ll M=103;
const ll K=103;
bitset<109> g[2][M*K];
ll n,m,k;
ll a[N][M];
ll sum[N];
ll cnt=0;
ll id[N],rk[N];
inline void init(ll i,ll d){for(ll t=0;t<=m*k+2;t++){g[0][t].reset();g[1][t].reset();}g[0][0][0]=1;ll cur=0;for(ll j=1;j<=m;j++){cur+=a[i][j];for(ll t=max(0,cur-d);t<=cur;t++) g[j&1][t].reset();for(ll t=max(0,cur-d);t<=cur;t++){if(t>=a[i][j]) g[j&1][t]=g[j&1^1][t-a[i][j]];g[j&1][t]|=(g[j&1^1][t]<<1);}}
}ll f[2][M*K];
bool cmp(ll x,ll y){if(sum[x]!=sum[y]) return sum[x]>sum[y];return x<y; 
}
int main(){n=read(),m=read(),k=read();for(ll i=1;i<=n;i++){id[i]=i;for(ll j=1;j<=m;j++){a[i][j]=read();sum[i]+=a[i][j];}}sort(id+1,id+n+1,cmp);for(ll i=1;i<=n;i++){rk[id[i]]=i;}id[0]=n+1;rk[n+1]=0;sum[n+1]=m*k;for(ll i=1;i<=n;i++){ll p=id[i];memset(f[i&1],0x3f,sizeof(f[i&1]));init(p,sum[id[i]]-sum[id[i+1]]);for(ll j=sum[id[i+1]];j<=sum[id[i]];j++){for(ll num=0;num<=(sum[id[i-1]]-sum[id[i+1]])/k;num++){ll mid=j+num*k;if(g[m&1][j][num]){if(id[i-1]<id[i]){f[i&1][j]=min(f[i&1][j],f[i&1^1][mid]+m-num);}else{f[i&1][j]=min(f[i&1][j],f[i&1^1][mid+1]+m-num);}}}}for(ll j=sum[id[i]];j>=sum[id[i+2]];j--){f[i&1][j]=min(f[i&1][j],f[i&1][j+1]);}}printf("%d\n",f[n&1][0]);return 0;
}

最大测试点用时不超过 400ms ,时限6000ms。

相关新闻

  • 详细介绍:Python高效合并Excel多Sheet工作表,告别繁琐手动操作
  • Python爬虫的实现流程
  • 自动化运维工具 Ansible 集中化管理服务器 - 实践

最新新闻

  • π0.7 VLA模型实现组合泛化与跨本体迁移
  • 2026宁波商圈黄金回收权威盘点 龙头领跑,高价变现优选指南 - 奢侈品回收测评
  • 全新一览湖北鄂州地区2026叛逆青少年全封闭特训学校前十名单公布 - 辛云教育资讯
  • Kubernetes网络诊断:从conntrack到iptables的分层排查法
  • 2026合肥手表回收怎么选?公安备案合规门店规避扣损套路技巧 - 生活时报
  • 济南多块劳力士打包回收攻略,名品集批量回收叠加优惠 - 生活时报

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号