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

Splitting Items

爱丽丝和鲍勃有 nn 件物品想要分配,所以他们决定玩一个游戏。所有物品都有一个成本,第 ii 件物品的成本是 aiai​。玩家轮流行动,从爱丽丝开始。

在每一轮中,玩家选择剩下的物品之一并将其拿走。游戏一直进行,直到没有物品剩下。

假设 AA 是爱丽丝所拿物品的总成本,BB 是鲍勃所拿物品的总成本。那么游戏的最终 得分 将等于 A−BA−B。

爱丽丝想要最大化得分,而鲍勃想要最小化得分。爱丽丝和鲍勃都会采取最优策略。

但是游戏将在明天进行,所以今天鲍勃可以稍微修改成本。他可以将几个(可能是没有或全部)物品的成本 aiai​ 增加一个整数值(可能是相同的值或每个物品不同的值)。然而,总的增加必须小于或等于 kk。否则,爱丽丝可能会怀疑什么。请注意,鲍勃 不能降低 成本,只能增加。

鲍勃能达到的最低可能得分是多少?

输入

第一行包含一个整数 tt (1≤t≤50001≤t≤5000) — 测试用例的数量。接下来有 tt 个案例。

每个测试用例的第一行包含两个整数 nn 和 kk (2≤n≤2⋅1052≤n≤2⋅105; 0≤k≤1090≤k≤109) — 物品的数量和鲍勃可以进行的最大总增加。

每个测试用例的第二行包含 nn 个整数 a1,a2,…,ana1​,a2​,…,an​ (1≤ai≤1091≤ai​≤109) — 物品的初始成本。

保证所有测试用例的 nn 之和不超过 2⋅1052⋅105。

输出

对于每个测试用例,打印一个整数 — 鲍勃在增加了几个(可能是没有或全部)物品的成本后,最低可能得分 A−BA−B。

示例

InputcopyOutputcopy
4
2 5
1 10
3 0
10 15 12
4 6
3 1 2 4
2 4
6 9
4
13
0
0

注意

在第一个测试用例中,鲍勃可以将 a1a1​ 增加 55,使得成本变为 [6,10][6,10]。明天,爱丽丝将拿走 1010,鲍勃将拿走 66。总得分将等于 10−6=410−6=4,这是最低可能的得分。

在第二个测试用例中,鲍勃不能改变成本。因此得分将等于 (15+10)−12=13(15+10)−12=13,因为爱丽丝将拿走 1515,鲍勃将拿走 1212,而爱丽丝 — 1010。

在第三个测试用例中,鲍勃例如可以将 a1a1​ 增加 11,a2a2​ 增加 33,a3a3​ 增加 22。总变化等于 1+3+2≤61+3+2≤6,成本将变为 [4,4,4,4][4,4,4,4]。显然,得分将等于 (4+4)−(4+4)=0(4+4)−(4+4)=0。

在第四个测试用例中,鲍勃可以将 a1a1​ 增加 33,使得成本变为 [9,9][9,9]。得分将等于 9−9=09−9=0。

//因为两人每次都是一定拿最大的那个数,所以把数字按从大到小排序过后,每次只需要再Bob拿的时候,将Bob要拿的数加到不大于前一个数直到m为0或者数拿完了
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int a[N];
signed main(){int t;cin>>t;while(t--){int n,m;cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+1+n,greater<int>());for(int i=2;i<=n;i+=2){if(m<=0)break;int h=a[i-1]-a[i];if(h<m){a[i]+=h;m-=h;}else{a[i]+=m;m=0;}}int num=0,num1=0;int g=1;for(int i=1;i<=n;i++){if(g%2==1){num+=a[i];}else{num1+=a[i];}g++;}int v=num-num1;cout<<v<<endl;}} 

相关文章:

  • Ubuntu22.04 安装 Miniconda3
  • WINUI——Magewell视频捕捉开发手记
  • 【数据库】安全性
  • 深入解析 Java 中的 synchronized:从使用到底层原理的全面详解
  • 基于Matlab实现LDA算法
  • Java求职者面试:Spring、Spring Boot、Spring MVC与MyBatis技术深度解析
  • 使用glide 同步获取图片
  • C# CallerMemberName特性
  • 功能管理:基于 ABP 的 Feature Management 实现动态开关
  • docker中,容器时间和宿机主机时间不一致问题
  • SpringBoot项目打jar包自定义名称完全指南
  • 02 C语言程序设计之导言
  • 嵌入式学习笔记 - freeRTOS任务栈在初始化以及任务切换时的压栈出栈过程分析
  • OpenEMMA: 打破Waymo闭源,首个开源端到端多模态模型
  • [手写系列]从0到1开发并上线Edge浏览器插件
  • 硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总
  • 【使用】【经验】docker 清理未使用的镜像的命令
  • Ubuntu安装Docker命令清单(以20.04为例)
  • Docker容器使用手册
  • 运维 vm 虚拟机ip设置
  • 垂直b2b网站建设/台州网站建设平台
  • 政府网站建设纳入考核内容/新闻式软文经典案例
  • 动画型网站/乱码链接怎么用
  • 网站建设技术风险/杭州网站优化搜索
  • 做网站如何处理并发问题/长春关键词优化公司
  • 苏州网站制作推广/怎样推广app别人才愿意下载