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

P10277 [USACO24OPEN] Bessies Interview S 题解

P10277 [USACO24OPEN] Bessie's Interview S 题解

题目传送门

我的博客

思路

首先这道题第一问非常好做。只需要按照题目描述的那样模拟即可。即用优先队列存每个奶牛的面试时间,每次取出最小的时间,加入下一只奶牛。最后输出q.top()即可。伪代码如下。

for(i : from 1 to k){push a[i] into the queue
}
for(i : from k+1 to n){t = q.top()push a[i]+t into the queue
}
the answer is q.top()

再来看第二问。问哪些农夫可能会面试她。

显然,每个农夫会面试到哪只奶牛是不确定的,但是每只奶牛接受面试的时间是唯一确定的。所以我们可以先统计每只奶牛面试的开始时间和结束时间。当第 \(i\) 只奶牛的结束时间为 \(t\) 且第 \(j\) 只奶牛的开始时间也为 \(t\) 时,它们可能就能被同一个农夫面试。

想到了什么?笔者这里第一个想到的就是建图,然后跑dfs。具体怎么建图呢?我们发现,每次如果有 \(t\) 个农夫同时空闲下来,那么这 \(t\) 个农夫均有可能继续面试接下来 \(k\) 个奶牛。因此他们都需要和这些点连一条边。样例如下。

这时候只需要把上图反向一下,从 \(n\) 开始跑,看看那些再 \(1\)\(k\) 内的点可以遍历到即可。

但是这样时间复杂度明显爆炸了。于是我们想,令状态 \(s\) 表示当前时间 \(time\) 接受采访可能会遇到的农夫有哪些。很容易发现对于奶牛 \(i\)\(time+t_i\) 的状态和 \(time\) 的状态是一样的。于是可以让 \(time+t_i\)\(time\) 连一条边。最后从 \(n\) 接受面试的时间开始遍历,统计有哪些 \(1\)\(k\) 内可以到达的点。

因为 \(1 \leq t_i \leq 10^9\),所以建图的时候很明显需要离散化。这里用map实现。

代码

const int N=3e5+10;
int n,k,cnt=0;
ll a[N],st[N],en[N];
ll ans1=0;//第一问答案
struct node{int id;ll w;bool operator < (const node &A)const {return w<A.w;}
};
priority_queue<node> q;//优先队列
struct edge{int nxt,to;
}e[N<<1];
int head[N],num_Edge=0;
void add_Edge(int from,int to){e[++num_Edge].nxt=head[from];e[num_Edge].to=to;head[from]=num_Edge;
}
map<int,int> mp;//离散化用的map
int getid(int t){//查找离散化之后的下标if(mp.find(t)==mp.end()) mp[t]=++cnt;/*map.find函数返回的是一个迭代器,若查找成功,返回该键对应元素的迭代器;若未找到,返回与map.end()相同的迭代器*/return mp[t];
}
int vis[N];//是否被遍历到
void dfs(int u){if(vis[u]) return ;vis[u]=1;for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;dfs(v);}
}
signed main(){n=Read();k=Read();cnt=k;for(int i=1;i<=n;i++) a[i]=Read();for(int i=1;i<=k;i++){//1 到 k 直接进队st[i]=0ll,en[i]=a[i];q.push((node){i,-a[i]});//上面写的大根堆,查找最小值需要用小根堆,取反一下即可add_Edge(getid(en[i]),i);}for(int i=k+1;i<=n;i++){node t=q.top();q.pop();t.w=-t.w;st[i]=t.w;en[i]=t.w+a[i];q.push({i,-en[i]}); add_Edge(getid(en[i]),getid(st[i]));//建反图}ans1=q.top().w;ans1=-ans1;printf("%lld\n",ans1);dfs(getid(ans1));//从 n 的面试时间开始遍历for(int i=1;i<=k;i++) printf("%d",vis[i]);return 0; 
}
http://www.gsyq.cn/news/42104.html

相关文章:

  • AI 时代的数据库进化论 —— 从向量到混合检索
  • vue 3.x 前端导出功能
  • 最高法-合同目的的认定
  • 2025年恒温恒湿机标杆厂家最新推荐:中焓环境,档案室恒湿机/精密恒温恒湿机/吊顶恒温恒湿机/档案室恒温恒湿机,定义环境控制精准新标准
  • 酸角糕行业发展趋势解析:2025年十大品牌综合测评与选择指南
  • [题解]P6717 [CCO 2018] Boring Lectures
  • Bigtop 从零开始搭建大数据集群
  • chatgpt-to-md优化并重新复习
  • SaaS版MES系统PC端后台特性清单与设计说明
  • 2025年水上游乐及泳池设备标杆厂家推荐:山东汇川,室内水上乐园/儿童水上乐园/大型水上乐园/室内泳池/定制化服务引领行业新标​
  • 2025年冷冻式干燥机标杆厂家最新推荐:凌宇机械,冷冻式压缩空气干燥机/风冷高温冷冻式干燥机/水冷高温冷冻式干燥机/吸附式干燥机/以高效节能与全场景方案树立行业新标准
  • 2025优质媒体服务商推荐榜:媒体邀约靠谱平台助力品牌高效传播
  • 2025大连汽车凹陷修复厂家推荐榜:震城汽车领衔,汽车数据修复厂家靠谱机构守护原厂漆质感
  • android音频低延时设计:Fast Mixer官方文档 - 详解
  • 2025 年在线监测系统厂家最新推荐榜单:洁净环境、尘埃粒子、洁净室、无尘室等设备品牌技术与应用全面解析尘埃粒子在线监测系统/无尘室在线监测系统公司推荐
  • 2025年资质齐全的婚礼酒店排名,口碑好的婚礼酒店机构
  • 评估工程正成为下一轮 Agent 演进的重点
  • 前端的同学,终于要起飞啦,Github 6.3k star + ,免费可商用的UI元素库!!!
  • 2025 年砝码源头厂家最新推荐排行榜:聚焦优质供应商,助力精准计量选型,涵盖不锈钢 / 铸铁 / 天平 / 标准砝码品牌
  • 2025年昆明盛鲜智慧农贸市场推荐,盛鲜智慧集贸民生工程新标杆
  • axios 取消重复请求
  • .NET 开发:通过 C# 提取 PDF 中的图片
  • 机器人焊接混合气降本案例
  • SmartProxy HTTPS 代理 – 企业级出站 Web 访问与数据采集的安全可运营基座
  • 2025年房屋转向承建实力厂家权威推荐榜单:房屋转向技术/房屋整体转向/房屋平移转向源头厂家精选
  • Oracle VirtualBox windows 和物理机系统共享文件夹
  • 完整教程:免费华为云服务器教程华为云沃土云创计划
  • BIO、NIO、AIO的区别
  • 从楼宇到能源,BA190 打开万物互联的“数据桥梁”
  • 详细介绍:Qt C++ :QWidget类的主要属性和接口函数