`
believexkx
  • 浏览: 22466 次
  • 性别: 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
分享到:
评论

相关推荐

    poj 2051 Argus

    有多个任务一起开始执行,每个任务的时间不同,输出前n次的任务结果

    poj3306优先队列代码

    模拟题 要注意时间的处理 使用优先队列处理请求的事件 进行适当的运算符重载,可以简化代码

    POJ3253-POJ3253-Fence Repair【STL优先队列】

    标题“POJ3253-POJ3253-Fence Repair【STL优先队列】”指的是一个在线编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。该题目要求参赛者使用C++编程语言解决特定的问题,并且在解决方案中...

    JAVA中的优先队列与堆(POJ 2442)

    在"POJ 2442"这个编程问题中,我们可能需要利用优先队列解决一些排序或者寻找最优解的问题。例如,假设题目要求找到一系列任务的最早完成时间,其中每个任务都有一个开始时间和结束时间,我们可以使用优先队列来存储...

    POJ1062-Expensive dowry【dijkstra】

    这个过程需要用到优先队列(通常用最小堆实现)来存储待处理的节点,以保证每次都能选取距离起点最近的节点。 对于"POJ1062-Expensive dowry"这个题目,我们可以理解为在一个加权无向图中寻找从某个起点到其他所有...

    POJ 1751 求最小生成树prim算法(JAVA)

    这个过程可以使用优先队列(如二叉堆)来优化,以快速找到当前最小权重的边。 以下是Prim算法的详细步骤: 1. 选择一个起点,比如图中的任意一个顶点,将其加入到最小生成树中。 2. 创建一个数据结构(如数组或优先...

    poj训练计划.doc

    - 堆:如二叉堆,用于实现优先队列,如`poj3253`。 - 树:如二叉树和AVL树,用于存储和检索有序数据,如`poj2513`。 - **简单搜索** - 深度优先搜索:如`poj2488, poj3083`。 - 广度优先搜索:如`poj3278, poj...

    POJ算法题目分类

    * 图的深度优先遍历和广度优先遍历:图的深度优先遍历和广度优先遍历是指遍历图的两种方式,如 poj1860、poj3259、poj1062、poj2253、poj1125、poj2240。 * 最短路径算法:最短路径算法是指计算图中两点之间的最短...

    poj2488——dfs深度优先遍历

    poj 2488——dfs深度优先遍历 //给行数列数,求问能否遍历,给出字典序的一种遍历

    poj各种分类

    用于维护有序数据结构,如最小堆、最大堆,适用于实现优先队列。 #### 数组与链表 基本的数据存储结构,几乎所有的算法和数据结构都离不开它们的基础应用。 ### 四、搜索 #### 深度优先搜索与广度优先搜索 DFS和...

    POJ_3131.zip_POJ 八数码_poj

    3. 广度优先搜索算法的实现:包括初始化队列、进行迭代并检查每个状态是否为目标状态,以及如何将新状态入队。 4. 双向BFS的实现:包括维护两个队列,分别从起点和终点开始搜索,同时更新中间状态的信息。 5. 计算步...

    POJ2388-Who's in the Middle

    在提供的代码文件"POJ2388-Who's in the Middle.cpp"中,可以看到程序员可能采用了优先队列(即堆)来实现这个数据结构。优先队列在C++中可以通过`&lt;queue&gt;`库中的`priority_queue`实现。在初始状态下,将所有输入...

    POJ题目简单分类(ACM)

    - **堆**:如优先队列,用于实现最大值或最小值的快速访问。 - **trie树**:用于高效字符串查询,包括静态和动态构建。 4. **搜索算法**: - **深度优先搜索**:如poj2488,常用于解决树或图的遍历问题。 - **...

    poj题目分类

    * 图的深度优先遍历和广度优先遍历:例如 poj1860、poj3259、poj1062、poj2253、poj1125、poj2240。 * 最短路径算法:例如 Dijkstra、Bellman-Ford、Floyd、Heap+Dijkstra,例如 poj1860、poj3259、poj1062、poj...

    POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类

    - **例题**:poj1860, poj3259, poj1062, poj2253, poj1125, poj2240 - **解释**:最短路径算法包括Dijkstra算法、Bellman-Ford算法、Floyd算法以及堆优化的Dijkstra算法等。 ##### (3) 最小生成树算法 - **例题**...

    北大POJ初级-图算法

    通过分析这些代码,你可以看到算法的具体实现,包括数据结构的选择(如栈、队列、优先队列)、递归或迭代的策略,以及优化技巧,如记忆化搜索或动态规划。 学习和实践这些图算法不仅有助于提高在POJ等在线判题系统...

    POJ题目及答案

    例如,数据结构部分可能包括链表、栈、队列、树、图等经典结构的运用,如二叉树的遍历、图的深度优先搜索和广度优先搜索等;在图论方面,可能会遇到最小生成树、最短路径等问题;动态规划则常用于解决背包问题、最长...

Global site tag (gtag.js) - Google Analytics