`
believexkx
  • 浏览: 21578 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

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,此题算是直接应用优先队列的题了。
http://poj.org/problem?id=2051
废话不多说,直接贴代码————

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);
		}
	}
}

2
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics