zoukankan      html  css  js  c++  java
  • Hrbust 2061消息队列(优先队列应用)

    消息队列
    Time Limit: 1000 MS Memory Limit: 32768 K
    Total Submit: 222(80 users) Total Accepted: 87(71 users) Rating: Special Judge: No
    Description
    Windows操作系统是基于消息的,也就是说任何的事件,包括鼠标移动和点击,键盘的输入,都会被放入操作系统的消息队列中,而消息本身带有一定的参数和优先级。Windows会优先处理优先级较高的消息,当两个消息优先级相同时,按照先来先服务的原则进行处理,你的任务就是模拟这种机制。
    Input
    输入首先分为两种,GET表示从消息队列中取出一个消息。PUT表示把一个消息放入消息队列,每一个消息包含三个部分:内容,参数和优先级(数字越小优先级越高)。输入亦按照此顺序进行。消息的内容长度不会超过15。最多不超过60000个操作。
    Output
    对于每一个GET操作,若队列为空,输出EMPTY QUEUE!否则输出按照规则得到的第一个消息的内容和参数。
    Sample Input
    GET

    PUT msgone 11 6

    PUT msgtwo 8 4

    GET

    GET

    GET

    Sample Output
    EMPTY QUEUE!

    msgtwo 8

    msgone 11

    EMPTY QUEUE!

    因为要对队列进行补充和弹出的操作,因此不能用数组进行结构体排序,使用队列能方便的进行插入和弹出操作,同时,队列拥有优先级的属性设定,普通队列无法进行排序,因此可以用优先队列进行排序,注意题目有条件,如果优先级相同则按照先入先服务的机制,自定义优先队列结构体排序格式如下,其他操作都是直接模拟就好

    #include<stdio.h>
    #include<queue>///优先队列
    #include<string>
    #include<iostream>
    using namespace std;
    struct document///结构体打包
    {
        char name[20];
        int num;///参数记录
        int getnum;///优先级记录
        int equals;///先来后到顺序记录
        bool operator()(const document &a,const document &b)///比较函数存放于结构体中,bool返回值,命名为operator,参数是结构体类型【重载运算符】
        {
            if(a.getnum==b.getnum)///自定义结构体排序
            {
                return a.equals>b.equals;
            }
            return a.getnum>b.getnum;///从大到小降序排列
        }
    }much;
    
    int main()
    {
        string input;
        int flag=0;
        priority_queue<document,vector<document>,document >q;///定义优先队列,首位是队列中元素类型,中间是动态数组,最后是比对函数自定义,因为我放到了结构体中,因此函数名为结构体类型名
        while(cin>>input)
        {
            if(input=="GET")
            {
                if(!q.size())
                {
                    printf("EMPTY QUEUE!
    ");
                    continue;
                }
                else
                {
                    printf("%s %d
    ",q.top().name,q.top().num);///输出队列首位中结构体的各项数据,语法为top().xxx
                    q.pop();///弹出
                }
            }
            else
            {
                scanf("%s %d %d",much.name,&much.num,&much.getnum);
                much.equals=++flag;
                q.push(much);///入列
            }
        }
        return 0;
    }
    
  • 相关阅读:
    Web持久化存储Web SQL、Local Storage、Cookies(常用)
    浅谈TypeScript
    浅谈JavaScript、ES5、ES6
    AngularJS1.3一些技巧
    AngularJS学习总结
    poj-----Ultra-QuickSort(离散化+树状数组)
    HDUOJ---1241Oil Deposits(dfs)
    HDUOJ---携程员工运动会场地问题
    HDUOJ------2398Savings Account
    HDUOJ-----2399GPA
  • 原文地址:https://www.cnblogs.com/kuronekonano/p/11794357.html
Copyright © 2011-2022 走看看