天天看點

hdu 1434 幸福列車

    全部代碼實作,沒有用STL和queue,函數簡單明了!! 代碼實作: #include<stdio.h> #include<malloc.h> #include<string.h>

struct train{ char name[30]; int rp; train *next; };

train *head[10005]; int n,m;

void get(train *&t){ t=(train *)malloc(sizeof(train)); t->next=NULL; }

void Insert(int x,char *h,int rp){//進入一個人 train *p=head[x]->next,*q; q=head[x]; while(p!=NULL){ if(p->rp>rp || (p->rp==rp && strcmp(p->name,h)<0)) break; q=p; p=p->next; } train *anew; get(anew); strcpy(anew->name,h); anew->rp=rp; anew->next=q->next; q->next=anew; }

void GETout(int x){//踢出一個人 train *p=head[x]->next; printf("%s\n",p->name); head[x]->next=p->next; }

void JOin(int x,int y){//合并兩個列車 train *p=head[y]->next,*q; while(p!=NULL){ q=p; Insert(x,p->name,p->rp); p=p->next; free(q); } head[y]->next=NULL; }

int main(){ int i,j,k,r; char ch[30]; while(scanf("%d%d",&n,&m)!=EOF){ for(i=1;i<=n;i++) get(head[i]); for(i=1;i<=n;i++){ scanf("%d",&k); for(j=0;j<k;j++){ scanf("%s%d",ch,&r); Insert(i,ch,r); } } while(m--){               scanf("%s",ch); if(!strcmp(ch,"GETOUT")){ scanf("%d",&k); GETout(k); } else if(!strcmp(ch,"GETON")){ scanf("%d%s%d",&k,ch,&r); Insert(k,ch,r); } else{ scanf("%d%d",&k,&r); JOin(k,r); } } memset(head,0,sizeof(head)); } return 0; }

繼續閱讀