SDUT OJ 金牌、银牌、铜牌

来源:互联网 发布:电脑上怎么看淘宝微淘 编辑:程序博客网 时间:2024/04/27 16:49

金牌、银牌、铜牌

Time Limit: 1000MS Memory limit: 65536K

题目描述

Acm——大学中四大竞赛之首——是极具挑战性的大学生竞赛形式。在一场acm比赛中,一个参赛队伍由三人组合而成,在最短的时间内做出尽可能多的题目而且要尽量少提交错误代码,这样才能得到更高的排名。现在让我们模拟一次不正规的acm比赛,假设在比赛开始后30分钟(这时已经有不少同学提交了代码,在rating中已经出现),到比赛结束前,又有新的同学提交(在rating中出现),同时rating在不断变化着,还有一些同学因为一些原因中途退出比赛(这时rating中自动删除,当然在正式比赛中不会有这种情况)。最后终于比赛结束啦,看看rating,都有谁能拿到奖牌呢?

输入

第一行一个整数n(n<=1000),代表开始比赛后30分钟已经有n个人提交了代码。从第二行到第n+1行每行包括名字name(小于20个字符),分数p(0<=p<=10000),同时行数代表目前排名情况,第二行的排名第一,第三行排名第二,依次类推。

从第n+2行起,每行有一个字符,是A,Q,C,S,O中的一个:

A代表新加进rating中一名同学,紧随其后是名字name(小于20个字符),分数p(0<=p<=10000);

Q代表有一名同学退出了,接着是他的名字name(小于20个字符);

C代表有一个人的分数发生的改变,接着是此人的名字name,他的分数加多少(分数只会增加不会减少);

S代表一次显示此时rating的请求,这时输出所有在rating中的同学名字及他们的分数。

O代表比赛结束。

输出

对每次请求,输出此时rating中的所有同学名字和对应分数,在比赛结束时输出金牌获得者(一名),银牌获得者(两名),铜牌获得者(三名)(测试数据保证此时有至少6名同学在rating上)。注意:有同学添加到rating中或者分数改变后,在rating中有和这名同学有相同的分数,那么这名同学排在最后一个与他有相同分数同学的后面。

示例输入

7cze 90qch 87zff 70shangcf 66zhaohq 50zhrq 46yah 20A pc 56Q zffC qch 4SA von 66O

示例输出

qch 91cze 90shangcf 66pc 56zhaohq 50zhrq 46yah 20#1 : qch#2 : cze shangcf von#3 : pc zhaohq zhrq
#include <stdio.h>#include <string.h>#include <stdlib.h>struct node{    char name[30];    int sum;    struct node *next;}*head;int cnt;void A(){    cnt++;    struct node *q,*p,*t;    q=(struct node*)malloc(sizeof(struct node));    scanf("%s %d",q->name,&q->sum);    p=head;    t=p->next;    int flag=1;    while(t)    {        if(t->sum<q->sum)        {            flag=0;            p->next=q;            q->next=t;            break;        }        else        {            p=p->next;            t=t->next;        }    }    if(flag)    {        p->next=q;        q->next=NULL;    }}void Q(){    cnt--;    struct node *p,*t;    char wh[30];    scanf("%s",wh);    p=head;    t=p->next;    while(t)    {        if(strcmp(wh,t->name)==0)        {            p->next=t->next;            free(t);            break;        }        else        {            p=p->next;            t=p->next;        }    }}void C(){    char wh[30];    int x;    scanf("%s %d",wh,&x);    struct node *p,*q,*t;    p=head;    q=head->next;    while(q)    {        if(strcmp(wh,q->name)==0)        {            q->sum+=x;            p->next=q->next;            break;        }        else        {            p=p->next;            q=q->next;        }    }    p=head;    t=head->next;    int flag=1;    while(t)    {        if(t->sum<q->sum)        {            flag=0;            p->next=q;            q->next=t;            break;        }        else        {            p=p->next;            t=t->next;        }    }    if(flag)    {        t->next=q;        q->next=NULL;    }}void S(){    struct node *p;    p=head->next;    while(p)    {        printf("%s %d\n",p->name,p->sum);        p=p->next;    }    printf("\n");}void O(){    struct node *p;    printf("#1 :");    int k;    p=head->next;    while(p)    {        printf(" %s",p->name);        k=p->sum;        p=p->next;        head=head->next;        if(k==p->sum&&p)            continue;        else            break;    }    printf("\n");    printf("#2 :");    int cc=0;    p=head->next;    while(p)    {        printf(" %s",p->name);        cc++;        k=p->sum;        head=head->next;        p=p->next;        if(cc>=2)        {            if(k==p->sum)                continue;            else                break;        }    }    printf("\n");    printf("#3 :");    int ccc=0;    p=head->next;    while(p)    {        printf(" %s",p->name);        ccc++;        k=p->sum;        head=head->next;        p=p->next;        if(ccc>=3)        {            if(k==p->sum)                continue;            else                break;        }    }    printf("\n");}int main(){    int n,i;    char ch[25];    scanf("%d",&n);    cnt=n;    struct node *p,*q;    head=(struct node*)malloc(sizeof(struct node));    head->next=NULL;    p=head;    for(i=0; i<n; i++)    {        q=(struct node*)malloc(sizeof(struct node));        scanf("%s %d",q->name,&q->sum);        q->next=NULL;        p->next=q;        p=p->next;    }    while(~scanf("%s",ch))    {        if(ch[0]=='A')        {            A();        }        else if(ch[0]=='Q')        {            Q();        }        else if(ch[0]=='C')        {            C();        }        else if(ch[0]=='S')        {            S();        }        else if(ch[0]=='O')        {            O();            break;        }    }    return 0;}




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买家一直不退款怎么办 京东商家退货怎么办 发货后退货邮费怎么办 淘宝货到退款怎么办 淘宝收不到货怎么办 淘宝不处理投诉怎么办 实体店不能退货怎么办 顾客无理由退货怎么办 京东衣服质量问题怎么办 买家退货要运费怎么办 卖家不给退运费怎么办 淘宝申请退款卖家不退怎么办 网购商家报复怎么办 淘宝退货店家不同意怎么办 淘宝退货不同意退款怎么办 运费险没收到怎么办 地税逾期未申报怎么办 转转买家发到付怎么办 捡到苹果手机打不开怎么办 捡到指纹手机打不开怎么办 捡到手机密码打不开怎么办 遇到假苹果售后怎么办 做微商被骗囤货怎么办 代理如果不做了怎么办 微商加盟费不退怎么办 手机背面发霉了怎么办 手机电池被换了怎么办 苹果6pcpu发热怎么办 手机漏电怎么办手发麻 iphone主板烧了怎么办 ioS13.1抹掉数据怎么办 阿迪达斯 实体店 假货 怎么办 椰子v2鞋底发黄怎么办 椰子鞋 白色脏了怎么办 微信照片过期怎么办 开淘宝店快递怎么办 淘宝下架cmcc怎么办 别人说你穿假鞋怎么办 浅色裤子染色了怎么办 鞋扣不粘了怎么办 船鞋穿久了会臭怎么办