zoukankan      html  css  js  c++  java
  • HDU1434 幸福列车【模拟+优先队列】

    幸福列车

    Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)
    Total Submission(s): 2690    Accepted Submission(s): 891

    Problem Description
    一批幸福的列车即将从杭州驶向幸福的终点站——温州,身为总列车长的linle有一些奇怪的癖好。

    他会记录下全部乘客的名字(name)和他们的人品值(RP),根据这些将他们排序,并不时地从某辆列车里踢出人品最不好(RP值最低)的一个人,当两个人人品一样不好时,他就会踢出名字难听的人(linle认为按字典顺序,排在越在后面的人名字越难听)。

    当然出于列车行驶需要,他还会不时的发布一些命令,比如让某个乘客上车,合并某两辆列车等。

    linle的上一任秘书***因为不能高效地执行他的这些命令而被炒鱿鱼,他现在正在寻觅新的秘书人选,你能不能胜任呢?(谢绝男士,待遇丰厚~~~)
    Input
    本题包含多组测试,请处理到文件结束。
    对于每一组测试,第一行包含两个整数 N ,M ,表示一共有N( N<=10000 ) 辆列车,执行M( M<=10000 )次操作。
    接下来有 N (从1开始记数)辆列车的信息,每辆列车先有一个数字 Xi(1 <= Xi <= 100 ),表示该列车有Xi个乘客,接下来Xi行乘客信息,每个乘客包含名字(20个字符以内,不包含空白符)和人品(0<= RP <=30000)。
    再接下来有 M 行操作信息,一共有3种操作,分别为

    GETON Xi name RP 表示有一个叫name的人品为RP的人登上第Xi列车

    JOIN Xi Xj 表示有将第Xj辆列车合并到Xi辆列车

    GETOUT Xi 表示从第Xi辆列车踢出一个人品最差的人

    测试数据保证每个操作均合法,即不会将已经被合并到其他列车的列车再进行合并,也不会从一辆空列车里踢出乘客
    Output
    对于每个 GETOUT 命令,输出被踢出的那个人的名字
    Sample Input
    3 5 2 xhd 0 zl 1 2 8600 1 ll 2 1 Ignatius 3 GETOUT 1 JOIN 1 2 GETOUT 1 GETON 3 hoho 2 GETOUT 3
    Sample Output
    xhd zl hoho
    Hint
    Huge input, scanf is recommended.
    Author
    linle
    Source

    问题链接HDU1434 幸福列车

    问题简述参见上文。

    问题分析

    这个问题需要使用优先队列,以便让指定条件的乘客下车,不然算起来就复杂了。

    剩下的问题就是构建一个好的数据结构来表示问题,这里优先队列是最为合适的。

    对于输入的数据,将其放入优先队列中即可。

    然后就是模拟三种命令的操作。

    程序说明

    优先队列q[]的元素数量多一个(N+1)比较好,有关的操作就便利了。

    名字使用string类型的话,不论输入输出还是计算处理都是方便的。

    输入输出使用C++的方式是方便简洁的。

    为了使得输入输出速度与C语言一样快,使用了语句"std::ios::sync_with_stdio(false);"。

    题记:(略)

    参考链接:(略)


    AC的C++语言程序如下:

    /* HDU1434 幸福列车 */
    
    #include <iostream>
    #include <queue>
    
    using namespace std;
    
    const int N = 10000;
    
    struct _node {
        string name;
        int rp;
        friend bool operator < (_node a, _node b) {
            if(a.rp != b.rp)
                return a.rp > b.rp;
            else
                return a.name < b.name;
        }
    };
    
    int main()
    {
        std::ios::sync_with_stdio(false);
    
        int n, m, xi, xj;
    
        while(cin >> n >> m) {
            priority_queue<_node> q[N+1];
            _node t;
    
            for(int i=1; i<=n; i++) {
                cin >> xi;
                while(xi--) {
                    cin >> t.name >> t.rp;
    
                    q[i].push(t);
                }
            }
    
            while(m--) {
                string op;
    
                cin >> op;
                if(op == "GETON") {
                    cin >> xi >> t.name >> t.rp;
    
                    q[xi].push(t);
                } else if(op == "JOIN") {
                    cin >> xi >> xj;
                    while(!q[xj].empty()) {
                        t = q[xj].top();
                        q[xi].push(t);
                        q[xj].pop();
                    }
                } else if(op == "GETOUT") {
                    cin >> xi;
                    t = q[xi].top();
                    cout << t.name << endl;
                    q[xi].pop();
                }
            }
        }
    
        return 0;
    }




  • 相关阅读:
    Codeforces Gym 100571A A. Cursed Query 离线
    codeforces Gym 100500 J. Bye Bye Russia
    codeforces Gym 100500H H. ICPC Quest 水题
    codeforces Gym 100500H A. Potion of Immortality 简单DP
    Codeforces Gym 100500F Problem F. Door Lock 二分
    codeforces Gym 100500C D.Hall of Fame 排序
    spring data jpa 创建方法名进行简单查询
    Spring集成JPA提示Not an managed type
    hibernate配置文件中的catalog属性
    SonarLint插件的安装与使用
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563579.html
Copyright © 2011-2022 走看看