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

P8272 [USACO22OPEN] Apple Catching G

洛谷

先考虑推导式子。

设我们选择的奶牛为 \(i\),选择的苹果是 \(j\)

那么可以得到式子:

\[|x_i-x_j|\le t_j-t_i \]

直接拆掉绝对值,因为绝对值会取较大的值,所以不需要考虑二者大小关系的影响,然后即可推得两式:

\[x_i+t_i\le t_j+x_j \]

\[t_i-x_i\le t_j-x_j \]

仅在满足以上条件时可以拿到苹果。

那么此时我们就有了一个统一的衡量标准,经典的贪心思路是,对于每一个奶牛,我们去选择可以拿到,且最不容易被其它奶牛拿到的苹果。

因为苹果和奶牛在本质上没有区别,所以也可以让苹果去找奶牛。

我们将其中的一个量设置为一维,通过排序解决,另外一个量设为第二维,可以二分答案,为了方便插入删除以及二分查找,比较容易想到用一个 set 维护第二维。

那么我们就贪心的去选择接的苹果即可。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,ans;
struct P{int op,x,y,n;
}a[200005];
bool cmp(P a,P b){if(a.x!=b.x)return a.x>b.x;return a.y>b.y;
}
set<pair<int,int>> s;
signed main(){cin>>n;for(int i=1,t,x;i<=n;i++){cin>>a[i].op>>t>>x>>a[i].n;a[i].x=t+x,a[i].y=t-x;}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++){if(a[i].op==2)s.insert({a[i].y,i});else {while(a[i].n){auto it=s.lower_bound({a[i].y,0});if(s.end()==it)break;pair<int,int> tmp=*it;int id=tmp.second;int res=min(a[id].n,a[i].n);a[id].n-=res;a[i].n-=res;ans+=res;if(!a[id].n)s.erase(it);}}}cout<<ans;return 0;
}
http://www.jsqmd.com/news/65255/

相关文章:

  • 材料科学每日总结--Day13--数据挖掘
  • 原理图文档处理工具
  • P8187 [USACO22FEB] Robot Instructions S
  • 2025年3D扫描仪十大品牌权威排名:国产化替代首选TOP10
  • P8270 [USACO22OPEN] Subset Equality S
  • P6803 [CEOI 2020] 星际迷航
  • P8271 [USACO22OPEN] COW Operations S
  • P10779 BZOJ4316 小 C 的独立集
  • 街头徒手健身6倒立训练与肩部健康
  • AI语料优化新势力:助力企业抢占智能时代先机的优质服务商推荐
  • 基于MATLAB的位同步提取方法
  • Manim介绍
  • P2475 [SCOI2008] 斜堆
  • CF1970E3 Trails (Hard)
  • 双线性四边形等参单元程序(MATLAB实现)
  • 双线性四边形等参单元程序(MATLAB实现)
  • 102302141_易敏亮第四次数据采集作业
  • 李宏毅机器学习笔记41 - 实践
  • P6706 [COCI 2010/2011 #7] KUGLICE
  • P3596 [POI 2015 R3] 高速公路现代化 Highway modernization
  • AT_arc179_d [ARC179D] Portable Gate
  • AI Browser:我用 CC 做了个桌面版 Manus
  • P3576 [POI 2014] MRO-Ant colony
  • flink 1.20 物化表(Materialized Tables) - 详解
  • P4953 [USACO02FEB] Cow Cycling
  • CF700B Connecting Universities
  • 克服EMD端点效应的齿轮箱故障特征识别方法
  • 大模型算法学习
  • Linux——网络命令和常用服务 - 指南
  • 用 GitHub issue 寫博客很好,但我要放棄了