前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HDU 1434 链表 幸福列车

HDU 1434 链表 幸福列车

作者头像
csxiaoyao
发布2019-02-18 17:55:50
5340
发布2019-02-18 17:55:50
举报
文章被收录于专栏:csxiaoyaocsxiaoyao

幸福列车

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

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

代码语言:javascript
复制

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

代码语言:javascript
复制

xhd zl hoho

Hint

Huge input, scanf is recommended.

代码:

代码语言:javascript
复制
#include<stdio.h>
#include<string.h>
#define Max 10001
struct  Train
{
    char name[30];
    int rp;
    Train*next;
}*train[Max];
void Insert(int i,char *name,int rp)
{
    Train *p,*q;
    p=train[i]->next;
    q=train[i];
    while(p!=NULL)
    {
        if(p->rp>rp||(p->rp==rp&&strcmp(p->name,name)<0))
            break;
        q=p;
        p=p->next;
    }
    Train *newnode;
    newnode=new Train;
    newnode->next=NULL;
    q->next=newnode;
    newnode->next=p;
    strcpy(newnode->name,name);
    newnode->rp=rp;
}
void getout(int i)
{
    printf("%s\n",train[i]->next->name);
    train[i]->next=train[i]->next->next;
}
void join(int i,int j)
{
    Train *p,*q;
    // q=new Train;
    p=train[j]->next;
    while(p!=NULL)
    {
        q=p;
        Insert(i,p->name,p->rp);
        //     q=p;
        p=p->next;
        delete q;
    }
    train[j]->next=NULL;
}
int main()
{
    int i,j,k,m,n,rp;
    char name[30],temp[7];
    while(scanf("%d%d",&n,&m))
    {
        for(i=1; i<=n; i++)
        {
            train[i]=new Train;
            train[i]->next=NULL;
            scanf("%d",&j);
            while(j--)
            {
                scanf("%s %d",name,&rp);
                Insert(i,name,rp);
            }
        }
        while(m--)
        {
            scanf("%s",temp);
            if(strcmp(temp,"GETOUT")==0)
            {
                scanf("%d",&j);
                getout(j);
            }
            else if(strcmp(temp,"GETON")==0)
            {
                scanf("%d%s%d",&j,name,&rp);
                Insert(j,name,rp);
            }
            else
            {
                scanf("%d%d",&j,&k);
                join(j,k);
            }
        }
        memset(train,0,sizeof(train));
    }
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年02月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 幸福列车
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档