zoukankan      html  css  js  c++  java
  • hdu 1873(看病要排队)

    题目大意:这道题是中文题,读者可直接去OJ上看题目

    解题思路:题意并不难理解。在我们的现实生活中,假如我们要找某一个医生看病,是不是就要到他的那一条队列上去排队???

    而这个队列又能根据多种情况来排序,这时候,我们可以考虑用以下优先队列。。。。


    代码如下:

    版本一(400MS左右):

    /*
     * 1873_2.cpp
     *
     *  Created on: 2013年8月8日
     *      Author: Administrator
     */
    
    #include <iostream>
    #include <queue>
    
    using namespace std;
    
    struct Node {
    	int pri;
    	int num;
    public:
    	friend bool operator<(const Node& a, const Node& b) {
    		if (a.pri != b.pri) {
    			return a.pri < b.pri;
    		}
    
    		return a.num > b.num;
    	}
    };
    
    int main() {
    
    	int n;
    
    	while (cin >> n) {
    		priority_queue<Node> q[4];
            int b,count = 1;
            string str;
            Node a;
    		for (int i = 0; i < n; ++i) {
    
    
    			cin >> str;
    
    
    
    			if (str == "IN") {
    				cin >> b >> a.pri;
    				a.num = count++;
    
    				q[b].push(a);
    
    			} else {
    				cin >> b;
    				if (!q[b].empty()) {
    					a = q[b].top();
    					q[b].pop();
    					cout<<a.num<<endl;
    				}else{
    					cout<<"EMPTY"<<endl;
    				}
    			}
    		}
    	}
    }
    
    



    版本二:

    /*
     * 1873_1.cpp
     *
     *  Created on: 2013年8月8日
     *      Author: Administrator
     */
    
    #include"stdio.h"
    #include"string.h"
    #include"stdlib.h"
    #include"queue"
    using namespace std;
    int tot;
    struct node {
    	int pri;
    	int num;
    	friend bool operator<(node n1, node n2) {
    		if (n1.pri == n2.pri)
    			return n2.num < n1.num;
    		else
    			return n1.pri < n2.pri;
    	}
    };
    int main() {
    	int n;
    	node now;
    	int a, b;
    	char str[20];
    	while (scanf("%d", &n) != -1) {
    		priority_queue<node> q[4];
    		tot = 0;
    		while (n--) {
    			scanf("%s", str);
    			if (strcmp(str, "OUT") == 0) {
    				scanf("%d", &a);
    				if (q[a].empty())
    					printf("EMPTY
    ");
    				else {
    					now = q[a].top();
    					q[a].pop();
    					printf("%d
    ", now.num);
    				}
    			} else if (strcmp(str, "IN") == 0) {
    				scanf("%d%d", &a, &b);
    				now.num = ++tot;
    				now.pri = b;
    				q[a].push(now);
    			}
    		}
    	}
    	return 0;
    }
    


  • 相关阅读:
    poj 2488 DFS
    畅通工程 并查集模版
    KMP 模板
    poj 1426 DFS
    poj 2528 线段数
    poj 3468 线段数 修改区间(点)
    CVPR2012文章阅读(2)A Unified Approach to Salient Object Detection via Low Rank Matrix Recovery
    如何制定目标
    Saliency Map 最新综述
    计算机视觉模式识别重要会议杂志
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3246622.html
Copyright © 2011-2022 走看看