HDU 1896 Stones

问题描述:

因为自行车的故障,semper开始每天早上从东走到西,在走回来,他经常玩一些游戏。在路边有一些石头,当他看到奇数的石头,他将尽可能扔远,如果是偶数的石头,就不管。现在给你一些石头的信息,你要告诉我从起点到最远处的石头的距离,请注意如果有两个或多个石头在同一个位置,他会选择大的扔,也就是能扔的距离较短的那一个。

Input:

第一行,有一个整数T(1<=T<=10),意味着测试案例的数目。然后跟随T个案例。

对于每一个测试案例,我会给你一个整数N,(0<N<=100000)在第一行,意味着路边石头的数量。然后跟随N行,每行有两个整数Pi(0<=Pi<=100000)和Di(0<=Di<=1000)。意味着第i个石头的位置,和sempr能扔多远。

Output:

每个案例输出一行。

Sample Input
  
  
2 2 1 5 2 4 2 1 5 6 6
 

Sample Output
  
  
11 12
import java.util.*;
//将每块石头按照坐标优先级放入优先级队列,每取出一块石头,再放入一块石头,只是它的位置属性改变了,但是能扔的距离保持不变
//注意到奇数扔,偶数不扔,弹出一个石头之后,添加新位置的石头,然后需要在弹出偶数的石头
public class StoneTest {
	public static void main(String[] args){
		PriorityQueue<Stone> pq=new PriorityQueue<Stone>();
		Scanner cin=new Scanner(System.in);
		int numCase=cin.nextInt();
		for(int i=0;i<numCase;i++){
			int numStone=cin.nextInt();
			for(int j=0;j<numStone;j++){
				int pi=cin.nextInt();
				int di=cin.nextInt();
				pq.offer(new Stone(pi,di));
			}
			Stone stone=null;
			while(pq.size()!=0){
			stone=pq.poll();
			
			pq.offer(new Stone((stone.Pi+stone.Di),stone.Di));
			
			stone=pq.poll();
			}
			System.out.println(stone.Pi);
			
		}
	}
}
class Stone implements Comparable<Stone>{
	int Pi;
	int Di;
	Stone(int pi,int di){
		this.Pi=pi;
		this.Di=di;
	}
	public int compareTo(Stone sto){
		if(Pi>sto.Pi)return 1;
		if(Pi<sto.Pi)return -1;
		else{
			if(Di>sto.Di)return 1;
			else return -1;
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值