POJ2051 Argus 优先队列

从7月16日就开始进行训练了,但是一直到现在感觉对各种算法理解不透彻,脑子里根本知识框架都没有,从今天起,开始整理自己所学的ACM的知识,发表的博客文章也希望对读者有所帮助,也希望有什么好的算法与大家分享~

现在就从最基础的队列来讲,队列最基础的原理就是先进先出,以java为例,用到的类库有PriorityQueue、Queue,里面的好多方法大家查一下API,现在介绍几个比较常用的方法。
PriorityQueue<E>中实现Comparable<>接口,自己根据题意写此接口
Ⅰ.add(E e)将指定元素插入此优先队列中,返回boolean值
Ⅱ.peek() 获取但不移除此队列的头,如果此队列为空,则返回null
Ⅲ.poll() 获取并移除此队列的头,如果此队列为空,则返回 null。
Ⅳ.size() 返回此 collection 中的元素数,返回int型
暂时这么,详细请查API


POJ2051,此题算是直接应用优先队列的题了。
[url]http://poj.org/problem?id=2051[/url]
废话不多说,直接贴代码————


import java.util.PriorityQueue;
import java.util.Scanner;

public class Main
{
class Data implements Comparable<Data>
{
int id,interval;
long time;
Data(int id,int in)
{
this.id=id;
time=interval=in;
}

public int compareTo(Data o) {
if(time<o.time)
return -1;
if(time==o.time&&id<o.id)
return -1;
return 1;
}

}
Scanner scan=new Scanner(System.in);
public static void main(String[] args)
{
new Main().run();
}
PriorityQueue<Data> pq=new PriorityQueue<Data>();
void run()
{
String op;
int a,b;
while(true)
{
op=scan.next();
if(op.charAt(0)=='#')
break;
a=scan.nextInt();
b=scan.nextInt();
pq.add(new Data(a,b));
}
int k=scan.nextInt();
while(k-->0)
{
Data temp=pq.poll();
System.out.println(temp.id);
temp.time+=temp.interval;
pq.add(temp);
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值