题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896
package D0725;
import java.util.*;
import java.io.*;
public class HDu1896 {
public static void main(String[] args) throws IOException {
StreamTokenizer st = new StreamTokenizer(new BufferedReader(
new InputStreamReader(System.in)));
PriorityQueue<Stone> pq = new PriorityQueue<Stone>();// 用LInkedList超时
int t;
st.nextToken();
t = (int) st.nval;
int n;
while (t-- > 0) {
pq.clear();
st.nextToken();
n = (int) st.nval;
int pi, di;
while (n-- > 0) {
st.nextToken();
pi = (int) st.nval;
st.nextToken();
di = (int) st.nval;
Stone stone = new Stone(pi, di);
pq.add(stone);
}
// 将扔出去的石头加入队列。忽略下一个石头(偶数石头),当处理到队列中最后一个的时候就是结果
int result = 0;// 结果
while (!pq.isEmpty()) {
Stone s = pq.poll();
int spi = s.pi + s.di;
Stone sto = new Stone(spi, s.di);
pq.add(sto);
pq.poll();// 将下一个石头(偶数)留在原地
if (pq.isEmpty())
result = s.di + s.pi;
}
System.out.println(result);
}
}
}
class Stone implements Comparable<Stone> {
public int pi, di;
public Stone(int pi, int di) {
this.pi = pi;
this.di = di;
}
@Override
public int compareTo(Stone o) {
if (pi < o.pi)
return -1;
else if (pi == o.pi) {
if (di < o.di)
return -1;
}
return 1;
}
}