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

AT_abc396_c [ABC396C] Buy Balls 题解

考察知识

  1. 贪心
  2. 分类讨论

题目大意

有 $N$ 个黑球和 $M$ 个白球,每个球都有一个值。在黑球的数量大于等于白球的数量的前提下,使所选球的数值和最大。
注意:数值可能为负数

思路

考虑贪心。

显然,黑球的所有正数我们都会选,设所选黑球数量为 $n$,白球剩余的正数数量为 $m$,之后会出现两种情况:

  • 当 $n \ge m$ 时:显然,应该把这 $m$ 个球都选了,此时即为最优。因为剩余数全为负数,再次选择必然会使总和变小。
  • 当 $n < m$ 时:先将最大的 $n$ 个白球计入总和。之后我们先考虑数值最大的白球,设为 $x$,设此时未选择的数值最大的黑球为 $y$,那么如果此时 $x + y > 0$,则加入总和(因为可以增加总和),否则此时总和即为答案。之后按以上方式一直计算其他球。

实现

我们可以先对两个数组进行排序,之后按照思路部分模拟即可。

代码参考

// Problem: C - Buy Balls
// Contest: AtCoder - AtCoder Beginner Contest 396
// URL: https://atcoder.jp/contests/abc396/tasks/abc396_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+10;
int n,m;
int a[N],b[N];
ll ans;
bool cmp(int a,int b){return a>b;
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;++i) scanf("%d",&a[i]);for(int i=1;i<=m;++i) scanf("%d",&b[i]);sort(a+1,a+n+1,cmp);sort(b+1,b+m+1,cmp);int cnt = 1;       //cnt表示当前的白球for(int i=1;i<=n;++i){if(a[i] >= 0){ans += a[i];if(b[cnt] >= 0) ans += b[cnt++];}else {if(a[i] + b[cnt] >= 0) ans += a[i] + b[cnt++];else break;}//printf("%lld %d\n",ans,cnt);}printf("%lld",ans);return 0;
}
http://www.njgz.com.cn/news/352.html

相关文章:

  • [ABC394D] Colorful Bracket Sequence 题解
  • K8S
  • Redis桌面管理工具Another-Redis-Desktop-Manager 1.3.7 安装全流程
  • 1
  • 创建【网络连接】的快捷方式
  • 线性代数
  • 12 MCP Servers的介绍
  • 500部迪士尼电影下载推荐_迪士尼动画大全列表必看网盘分享
  • 点分治
  • 华为荣耀手机还原主屏幕布局
  • ESP IDF引入外部资源文件
  • Day11 矩阵乘法 dp、*常系数齐次线性递推、*动态 dp
  • 亿邮相关漏洞总结
  • 使用DFU模式快速重装macOS15到macbook
  • 大模型的JSON之殇:从脆弱的API调用到稳健的未来
  • [20250727]数论基本概念、最大公约数
  • day05
  • 读心与芯:我们与机器人的无限未来06问题或方案
  • 使用Vue.js实现表单验证
  • HackerOne漏洞报告:AddTagToAssets操作中的IDOR漏洞分析
  • 2025.7 广大附中集训游记
  • Cursor 远程主机无法下载 Python 插件解决
  • 图灵奖和诺贝尔奖双料得主、AI教父Hinton教授国内首次演讲PPT全文实录
  • Chiplet封装技术全面介绍
  • HTTP响应处理的灵活设计(3844)
  • Hyperlane框架的高级特性深度解析:从零拷贝到宏系统的完美融合(8758)
  • 跨平台Web服务开发的新选择(3436)
  • 实时通信技术深度对比:WebSocket与SSE的最佳实践(8145)
  • 高并发处理的Rust实现方案(3116)
  • 现代Web服务器性能革命:我的Rust框架探索之旅(1806)