MJJ玩磁铁
题目:
Problem D: MJJ玩磁铁
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 139 Solved: 9
[Submit][Status][Web Board][Creator:eetze]
Description
MJJ在河北的ACM圈子中可谓是小有名气,毕竟当初一个人挑起队秒天秒地秒一切。在训练赛上多次AK江湖传闻一天不A10题晚上就睡不着觉。正是这么刻苦这么努力的MJJ,收货了一大批女粉丝,但是MJJ除了ACM以外却只喜欢玩磁铁。MJJ的班级有(N+1)个同学,(包括他自己)每个人都有手中都有一个磁铁,重量为W。每次MJJ都可以做以下行为之一:
1.每次MJJ可以挑战他的一个同学。MJJ选择一个属于他的磁铁,并把这个磁铁和他的同学的磁铁放在桌子上,用一个短距离让这两个磁铁相互吸引。假设桌子是绝对光滑的,两个磁铁会向中间移动。如果MJJ的磁铁速度比同学的磁铁速度慢,MJJ就会取得胜利,并且得到同学手中的磁铁。
2.MJJ极其擅长手工,每次他可以选择自己的两个磁铁,并将它们组合成一个新的磁铁。如果这两块磁铁的重量是U和V,那么新磁铁的重量将是(U+V),而这个操作将会消耗掉他(U+V)个单位的体力。
MJJ在今天的训练后已经非常的累了,所以他将这个问题留给了你。MJJ期望在获得最大的磁铁重量的前提下消耗最少的体力,请计算出MJJ最终的磁铁重量和其消耗的体力。
Input
第一行包含一个整数T(1≤T≤6),表示有T个测试用例。
对于每个测试用例:第一行包含一个整数N(1≤N≤100000),表示同学人数。
第二行包含N个整数W1…WN(1≤W≤100000),表示每个同学拥有的磁铁的重量。
最后一行包含一个整数M(1≤M≤100000),表示MJJ磁铁的重量。
Output
对于每个测试用例,首先输出一行“Case X:”(不带引号,X为测试用例编号,从1开始),然后输出带有两个整数的行:第一个是MJJ最终的磁铁重量,第二个是MJJ所需消耗的体力。
Sample Input
1
3
2 3 6
5
Sample Output
Case #1:
16 31 分析:如果你手中的磁铁加上你迎过来的磁铁的和能够赢过来下一块磁铁,那么就把磁铁加入到你的手中,
磁铁的合并方式永远都应该找手中最小的两个去和才能保证最小花费,因为磁铁最后要全部合在一起,所以你不用考虑合并磁铁赢取磁铁的问题,只需要判断手中所有磁铁的和是否大于下一块磁铁
当然,磁铁的重量要升序排列。 代码:
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Scanner; public class Main {
public static Scanner sc=new Scanner(System.in);
public static void main(String args[]) {
int time=sc.nextInt();
for(int n=0;n<time;++n)
res(n+1);
}
public static void res(int times) {
PriorityQueue<Long> pq=new PriorityQueue<>();
int num=sc.nextInt();
long[] sti=new long[num];
for(int n=0;n<num;++n) {
sti[n]=sc.nextLong();
}
Arrays.sort(sti);
long me=sc.nextLong();
pq.add(me);
long cost=0;
for(int n=0;n<num;++n)
if(me>sti[n]) {
pq.add(sti[n]);
me+=sti[n];
}
else
break;
while(pq.size()>1) {
Long r1=pq.poll();
Long r2=pq.poll();
cost+=r1+r2;
pq.add(r1+r2);
}
System.out.println("Case #"+times+":");
System.out.println(me+" "+cost);
}
}
MJJ玩磁铁的更多相关文章
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法
1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...
- [C#] 了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数
了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数 目录 简介 特点 方法的参数 方法的返回值 与批处理交互的一个示例 简介 我们知道,新建一个控制台应用程序的时候,IDE 会同时创建 ...
- 玩转spring boot——开篇
很久没写博客了,而这一转眼就是7年.这段时间并不是我没学习东西,而是园友们的技术提高的非常快,这反而让我不知道该写些什么.我做程序已经有十几年之久了,可以说是彻彻底底的“程序老炮”,至于技术怎么样?我 ...
- 玩转spring boot——结合redis
一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...
- 玩转spring boot——AOP与表单验证
AOP在大多数的情况下的应用场景是:日志和验证.至于AOP的理论知识我就不做赘述.而AOP的通知类型有好几种,今天的例子我只选一个有代表意义的“环绕通知”来演示. 一.AOP入门 修改“pom.xml ...
- 玩转spring boot——结合JPA入门
参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...
- 玩转spring boot——结合JPA事务
接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
随机推荐
- HDU - 1394 Minimum Inversion Number(线段树求逆序数---点修改)
题意:给定一个序列,求分别将前m个数移到序列最后所得到的序列中,最小的逆序数. 分析:m范围为1~n,可得n个序列,求n个序列中最小的逆序数. 1.将序列从头到尾扫一遍,用query求每个数字之前有多 ...
- crmv2项目
maven -----------------------------------------------------------------------------感谢打赏!
- Ajax学习系列——Ajax介绍及优缺点
一.什么是Ajax Ajax即“Asynchronous JavaScript And XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术. Ajax = 异步Jav ...
- STM32中ARM系列编译工具链的编译宏选择(__CC_ARM、__ICCARM__、__GNUC__、__TASKING__)
一 前言 stm32 f103中.关系到一个选择何种编译宏的问题.这里就梳理一下吧. 二 正文 1 在 core_cm3.h 文件中,有如下代码: #if defined ( __CC_ARM ) ...
- 使用HttpURLConnection方式访问接口
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- Web安全常见问题及解决方法
关于Web安全,我们最早听到最多的就是SQL注入.例如用户在系统登录界面输入用户名和密码,提交以后,后端直接拿到数据就拼接SQL语句去查询数据库.如果在输入时进行了恶意的SQL拼装,那么最后生成的SQ ...
- hdu 1160 上升序列 dp
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- CSU-ACM2020寒假集训比赛2
A - Messenger Simulator CodeForces - 1288E 两种解法,我选择了第二种 mn很好求,联系过就是1,没联系过就是初始位置 第一种:统计同一个人两次联系之间的出现的 ...
- Java中的Math.abs()
Math.abs(n):对int.long.float.double类型的数取绝对值 其中 int 类型的数取值范围是 -2^31——2^31-1(-2147483648 ~ 2147483647) ...
- OpenCV3 Ref SVM : cv::ml::SVM Class Reference
OpenCV3 Ref SVM : cv::ml::SVM Class Reference OpenCV2: #include <opencv2/core/core.hpp>#inclu ...