【ZOJ - 2968 】Difference Game (贪心,思维模拟)

题干:

Now you are going to play an interesting game. In this game, you are given two groups of distinct integers and C coins. The two groups, named Ga and Gbrespectively, are not empty and contain the same number of integers at first. Each time you can move one integer in one group to the other group. But a move that makes a group empty is considered as invalid. Each move will cost you p coins, and pequals the difference of the size between the two group (take the absolute value. e.g. moving a number from the group of size 4 to the group of size 6 will cost you |4 - 6| = 2 coins, and moving a number between two group with same size will not cost any coins). You can do as many moves as you wish, so long as the total cost does not exceed C.

Let M be the minimum integer in Ga, and N be the maximum integer in Gb. The purpose of this game is to produce a maximum (M - N).

Input

Standard input will contain multiple test cases. The first line of the input is a single integer T (1 <= T <= 60) which is the number of test cases. And it will be followed by T consecutive test cases.

Each case begin with two integers S (1 <= S <= 20000, indicating the size of Ga and Gb at first) and C (0 <= C <= 1000000). Two lines of S integers follow, representing the numbers in Ga and Gb respectively. All these integers are distinct and are between 1 and 50000, both inclusive.

Output

Results should be directed to standard output. The output of each test case should be a single integer in one line, which is the maximum possible value for M - N after some moves.

Sample Input

 

2
1 10
10
12
2 10
1 2
3 4

 

Sample Output

 

-2
1

 

Hint

For Sample 1, two groups are of size 1, so no moves can be done because any moving will make Ga or Gb empty, which is not valid. So M = 10, N = 12, M - N = -2.
For Sample 2, one valid steps of moves is:
Move 1 in Ga to Gb, cost 0 coins.
Move 3 in Gb to Ga, cost 2 coins.
Move 4 in Gb to Ga, cost 0 coins.
Then Ga contains 2 3 4, Gb contains 1, M = 2, N = 1, M - N = 1. This is the maximum possible value.

题目大意:

有Ga、Gb两堆数字,初始时两堆数量相同。从一堆中移一个数字到另一堆的花费定义为两堆之间数

量差的绝对值,初始时共有钱C。求移动后Ga的最小值减Gb的最大值可能的最大值。

解题报告:(链接)

假如有足够钱移动,那么Ga的最大值和Gb的最小值应该是两堆合并后排序中相邻的两数。那么我们 就枚举这个数。

枚举的时候我们需要确定形成这个情况(大的都在Ga堆,小的都在Gb堆)的最少花费,这个花费可以这样解决,假设Ga中向Gb中需要移入ab个数,Gb需要向Ga移入ba个数,首先当然是Ga移一个给Gb,然后Gb移一个给Ga,这样直到某一一堆需要移出都移出停止,此时的花费就是 2*min(ab,ba)。接着就是其中一堆一直移给另一堆,每移一次费用用会增2,所以此时的花费为 |ab-ba|*(|ab-ba|-1)。总花费就为2*min(ab,ba) + |ab - ba| *(|ab -ba|- 1)。 当然可能没有足够钱移动,Ga堆的最小值永远小于Gb堆的最大值,这样我们当然要把Ga堆前C/2 (C/2+1)小的移到Gb堆,Gb堆前C/2+1(C/2)的移到Ga堆,当然是交替移。

但是做完题后,有个疑问,如果A中的值很大,B中的值很小,那是不是选择不移动,会得到更优答案?

答案是否定的,(也就是说首先拿到这题第一颗定心丸就是:交换总比不交换要好,也就是如果还有钱就一定要去交换),因为他是要 max(A_{min} - B_{max}),所以你把Bmax或者Amin换过去,会使得Amin变大,Bmax变小,所以对两个参数都有利,那么根据贪心原则,何乐而不为?

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 4e5 + 5;
int n;
struct Node {ll val;int id;bool operator<(const Node & b) {return val < b.val;}
} g[MAX],ga[MAX],gb[MAX];
int suma[MAX],Sumb[MAX];
int main() {int t;cin>>t;int s,c;while(t--) {memset(g,0,sizeof g);memset(ga,0,sizeof ga);memset(gb,0,sizeof gb);memset(suma,0,sizeof suma);memset(Sumb,0,sizeof Sumb);scanf("%d%d",&s,&c);ll ans = -1;for(int i = 1; i<=s; i++) scanf("%lld",&ga[i].val),ga[i].id = 1;for(int i = 1; i<=s; i++) scanf("%lld",&gb[i].val),gb[i].id = 2;for(int i = 1; i<=2*s; i++) {if(i<=s) g[i] = ga[i];else g[i] = gb[i-s];}sort(ga+1,ga+s+1);sort(gb+1,gb+s+1);sort(g+1,g+2*s+1);for(int i = 1; i<=2*s; i++) {suma[i] = suma[i-1];if(g[i].id == 1) suma[i]++;}for(int i = 2*s; i>=1; i--) {Sumb[i] = Sumb[i+1];if(g[i].id == 2) Sumb[i]++;}if(s == 1) {printf("%d\n",ga[1].val-gb[1].val);continue;}for(int i = 1; i<2*s; i++) {//在i这个地方断开int numa = suma[i];int numb = Sumb[i+1];int ci = min(numa,numb);ll tmp;//花钱数if(ci == numa) {ll sheng = numb - numa;tmp = ci*2 + sheng*(sheng-1);} else {ll sheng = numa - numb;tmp = ci*2 + sheng*(sheng-1);}if(tmp <= c) {ans = max(ans,g[i+1].val-g[i].val);}}if(ans==-1) {int ci = c/2+1;ans=max(ga[ci].val-gb[s-ci].val,ga[ci+1].val-gb[s-(ci-1)].val);}printf("%lld\n",ans);}return 0 ;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 rqt_console 和 roslaunch

Description:本教程介绍如何使用 rqt_console 和 rqt_logger_level 进行调试&#xff0c;以及如何使用 roslaunch 同时运行多个节点。早期版本中的 rqt 工具并不完善&#xff0c;因此&#xff0c;如果你使用的是“ROS fuerte”或更早期的版本&#xff0c;请同时参考 这个页面 学…

机器学习必备宝典-《统计学习方法》的python代码实现、电子书及课件

本文转自微信公众号&#xff1a;机器学习初学者 原创&#xff1a; 机器学习初学者 机器学习初学者 6天前 《统计学习方法》可以说是机器学习的入门宝典&#xff0c;许多机器学习培训班、互联网企业的面试、笔试题目&#xff0c;很多都参考这本书。本站根据网上资料用python复现…

【2019牛客暑期多校训练营(第一场) - H】XOR(线性基,期望的线性性)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/881/H 来源&#xff1a;牛客网 Bobo has a set A of n integers a1,a2,…,ana1,a2,…,an. He wants to know the sum of sizes for all subsets of A whose xor sum is zero modulo (1097)(1097). F…

机器学习入门必备的13张“小抄”(附下载)

目录 1&#xff09;TensorFlow 2&#xff09;Keras 3&#xff09;Neural Networks 4&#xff09;Numpy 5&#xff09;Scipy 6&#xff09;Pandas 7&#xff09;Scikit-learn 8&#xff09;Matplotlib 9&#xff09;PythonForDataScience 最近在github上发现了很有用的…

吴恩达机器学习作业(1):线性回归

目录 1&#xff09;导入相关库和数据 2&#xff09;代价函数 3&#xff09;批量梯度下降 4&#xff09;绘制线性模型 前阵子在网易云课堂学习了吴恩达老师的机器学习课程&#xff0c;今天结合网上资料&#xff0c;用Python实现了线性回归作业&#xff0c;共勉。建议大家使…

ROS导航之参数配置和自适应蒙特卡罗定位

我们的机器人使用两种导航算法在地图中移动&#xff1a;全局导航&#xff08;global&#xff09;和局部导航&#xff08;local)。这些导航算法通过代价地图来处理地图中的各种信息&#xff0c;导航stack使用两种costmaps http://www.cnblogs.com/zjiaxing/p/5543386.html存储环…

吴恩达机器学习作业(2):多元线性回归

目录 1&#xff09;数据处理 2&#xff09;代价函数 3&#xff09;Scikit-learn训练数据集 4&#xff09;正规方程 练习1还包括一个房屋价格数据集&#xff0c;其中有2个变量&#xff08;房子的大小&#xff0c;卧室的数量&#xff09;和目标&#xff08;房子的价格&#…

机器学习笔记(八):神经网络:学习

目录 1&#xff09;Cost function 2&#xff09;Backpropagation algorithm 3&#xff09;Backpropagation intuition 4) Gradient checking 5&#xff09;Random initialization 6&#xff09;Putting it together 注&#xff1a;吴恩达老师的机器学习课程对反向传播算…

吴恩达机器学习作业(3):逻辑回归

目录 1&#xff09;数据处理 2&#xff09;sigmoid函数 3&#xff09;代价函数 4&#xff09;梯度下降 5&#xff09;预测函数 我们首先做一个练习&#xff0c;问题是这样的&#xff1a;设想你是大学相关部分的管理者&#xff0c;想通过申请学生两次测试的评分&#xff0c…

机器学习笔记(九):应用机器学习的建议

目录 1&#xff09;Deciding what to try next 2&#xff09;Evaluating a hypothesis 3&#xff09;Model selection and training/validation/test sets 4&#xff09;Diagnosing bias vs. variance 5&#xff09;Regularization and bias/variance 6&#xff09;Learn…

【洛谷 - P1231 】教辅的组成(网络流最大流,拆点)

题干&#xff1a; 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案&#xff0c;然而他却明明记得这书应该还包含一份练习题。然而出现在他眼前的书多得数不胜数&#xff0c;其中有书&#xff0c;有答案&#xff0c;有练习册。已知一个完整的书册均应该包含且仅包含一本书…

机器学习笔记(十):机器学习系统的设计

目录 1&#xff09;Prioritizing what to work on:Spam classification example 2&#xff09;Error analysis 3&#xff09;Error metrics for skewed classes 4&#xff09;Trading off precision and recall 5&#xff09;Data for machine learning 下面将学习到在构建…

【洛谷 - P1345 [USACO5.4]】奶牛的电信(网络流最小割,拆点)

题干&#xff1a; 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系&#xff0c;于是她们建立了一个奶牛电脑网络&#xff0c;以便互相交流。这些机器用如下的方式发送电邮&#xff1a;如果存在一个由c台电脑组成的序列a1,a2,...,a(c)&#xff0c;且a1与a2相连&#xff0c;a2与…

机器学习笔记(十一):支持向量机

目录 1&#xff09;Optimization objective 2&#xff09;Large Margin Intuition 3&#xff09;Kernels 1 4&#xff09;Kernels II 5&#xff09;Using an SVM 注&#xff1a;这一章SVM可能有点难理解&#xff0c;强烈建议大家把本章的编程作业做了。 1&#xff09;Opt…

ros中的坐标系,

ros中的坐标系&#xff0c;主要包括&#xff1a; map&#xff0c;odom&#xff0c;base_link(base_footprint) 以及如laser&#xff0c;camera等传感器的坐标系&#xff1b; 这些坐标系间的关系可以用下图表示&#xff1a; 这是一个有向图&#xff0c;图中涉及四个坐标系&#…

【Gym - 101061F】Fairness(dp,思维)

题干&#xff1a; Dwik and his brother Samir both received scholarships from a famous university in India. Their father, Besher, wants to send some money with each of them. Besher has n coins, the ith coin has a value of ai. He will distribute these coins…

(2)连续存储数组的方法

目录 连续存储的代表应用&#xff1a;数组 1&#xff09;结构体的定义&#xff1a; 2&#xff09;基本操作 对数据进行初始化 判断数组是否为空 输出数组 判断数组是否满 追加元素 插入数组元素 删除数组元素 逆序 对数组进行排序 这篇笔记是根据郝斌老师的上课讲义…

什么是欧拉角/姿态角?

用一句话说&#xff0c;欧拉角就是物体绕坐标系三个坐标轴(x,y,z轴&#xff09;的旋转角度。 在这里&#xff0c;坐标系可以是世界坐标系&#xff0c;也可以是物体坐标系&#xff0c;旋转顺序也是任意的&#xff0c;可以是xyz,xzy,yxz,zxy,yzx,zyx中的任何一种&#xff0c;甚至…

机器学习笔记(十二):聚类

目录 1&#xff09;Unsupervised learning introduction 2&#xff09;K-means algorithm 3&#xff09;Optimization objective 4&#xff09;Random initialization 5&#xff09;Choosing the number of clusters 1&#xff09;Unsupervised learning introduction 下…

Linux下root登陆mysql

错误如下&#xff1a; 1.停止mysql服务 #service mysql stop2.进入到skip-grant-tables模式&#xff1a; #mysqld_safe --skip-grant-tables3.root连接mysql数据库&#xff1a; #mysql -uroot -p如出现如下错误&#xff1a; 其实&#xff0c;原本就没有这个目录&#xff1…