⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpp2.cpp

📁 杭电 acm部分代码 有兴趣的可以下载 谢谢
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct contest
{
    long gold,silver,copper;
    char name[60];
}di[210];

struct team
{
    char name[60];
    long gold,silver,copper;
}ak[110];

struct school
{
    long gold,silver,copper;
    long team_num;
    char name[60];
    team tt[110];
}a[210];

int cmp_contest(const void *a,const void *b)
{
    return (strcmp((*(contest *)a).name,(*(contest *)b).name));
}

int cmp_team(const void *a,const void *b)
{
    if((*(team *)a).gold<(*(team *)b).gold)
        return 1;
    else
    {
        if((*(team *)a).gold>(*(team *)b).gold)
            return -1;
        else
        {
            if((*(team *)a).silver>(*(team *)b).silver)
                return -1;
            else
            {
                if((*(team *)a).silver<(*(team *)b).silver)
                    return 1;
                else
                {
                    if((*(team *)a).copper>(*(team *)b).copper)
                        return -1;
                    else
                    {
                        if((*(team *)a).copper<(*(team *)b).copper)
                            return 1;
                        else
                        {
                            return strcmp((*(team *)a).name,(*(team *)b).name);
                        }
                    }
                }
            }
        }
    }
}

int cmp_school(const void *a,const void *b)
{
    if((*(school *)a).gold<(*(school *)b).gold)
        return 1;
    else
    {
        if((*(school *)a).gold>(*(school *)b).gold)
            return -1;
        else
        {
            if((*(school *)a).silver>(*(school *)b).silver)
                return -1;
            else
            {
                if((*(school *)a).silver<(*(school *)b).silver)
                    return 1;
                else
                {
                    if((*(school *)a).copper>(*(school *)b).copper)
                        return -1;
                    else
                    {
                        if((*(school *)a).copper<(*(school *)b).copper)
                            return 1;
                        else
                        {
                            return strcmp((*(school *)a).name,(*(school *)b).name);
                        }
                    }
                }
            }
        }
    }
}

int main()
{
    long n,t,i,j,k,flag,t1,t2,t3,ca,temp1,temp2,tmp1,tmp2;
    long school_num,contest_num,p,num;
    char s1[60],s2[60],s3[60],s4[60];
    char gold[]="gold",silver[]="silver",copper[]="copper";
    scanf("%ld",&t);
    for(ca=1;ca<=t;ca++)
    {
        scanf("%ld%*c",&n);
        memset(a,0,sizeof(a));
        memset(di,0,sizeof(di));
        school_num=contest_num=0;
        for(i=0;i<n+1;i++)
        {
            a[i].team_num=a[i].gold=a[i].silver=a[i].copper=0;
            di[i].gold=di[i].copper=di[i].silver=0;
        }
        for(i=0;i<n;i++)
        {
            scanf("%s%s%s%s",s1,s2,s3,s4);
            t1=t2=t3=0;
            if(strcmp(gold,s3)==0)
            {
                t1++;
            }
            if(strcmp(silver,s3)==0)
            {
                t2++;
            }
            if(strcmp(copper,s3)==0)
            {
                t3++;
            }
            p=-1;
            for(j=0;j<school_num;j++)
            {
                if(strcmp(a[j].name,s1)==0)
                {
                    p=j;
                    break;
                }
            }
            if(p==-1)//school not exist
            {
                num=school_num;
                strcpy(a[num].name,s1);
                strcpy(a[num].tt[a[num].team_num].name,s2);
                if(t1)
                {
                    a[num].tt[a[num].team_num].gold++;
                    a[num].gold++;
                }
                if(t2)
                {
                    a[num].tt[a[num].team_num].silver++;
                    a[num].silver++;
                }
                if(t3)
                {
                    a[num].tt[a[num].team_num].copper++;
                    a[num].copper++;
                }
                a[num].team_num++;
                school_num++;
            }
            else//school exist at p
            {
                flag=-1;
                for(j=0;j<a[p].team_num;j++)
                {
                    if(strcmp(a[p].tt[j].name,s2)==0)
                    {
                        flag=j;
                        break;
                    }
                }
                if(flag==-1)//no such team at a[p]
                {
                    strcpy(a[p].tt[a[p].team_num].name,s2);
                    if(t1)
                    {
                        a[p].tt[a[p].team_num].gold++;
                        a[p].gold++;
                    }
                    if(t2)
                    {
                        a[p].tt[a[p].team_num].silver++;
                        a[p].silver++;
                    }
                    if(t3)
                    {
                        a[p].tt[a[p].team_num].copper++;
                        a[p].copper++;
                    }
                    a[p].team_num++;
                }
                else
                {
                    if(t1)
                    {
                        a[p].tt[flag].gold++;
                        a[p].gold++;
                    }
                    if(t2)
                    {
                        a[p].tt[flag].silver++;
                        a[p].silver++;
                    }
                    if(t3)
                    {
                        a[p].tt[flag].copper++;
                        a[p].copper++;
                    }
                }
            }
            p=-1;
            for(j=0;j<contest_num;j++)
            {
                if(strcmp(di[j].name,s4)==0)
                {
                    p=j;
                    break;
                }
            }
            if(p==-1)
            {
                strcpy(di[contest_num].name,s4);
                if(t1)
                    di[contest_num].gold++;
                if(t2)
                    di[contest_num].silver++;
                if(t3)
                    di[contest_num].copper++;
                contest_num++;
            }
            else
            {
                if(t1)
                    di[p].gold++;
                if(t2)
                    di[p].silver++;
                if(t3)
                    di[p].copper++;
            }
        }
        printf("Case %ld:\n",ca);
        printf("****************\n");
        printf("school number: %ld\n",school_num);
        qsort(a,school_num,sizeof(school),cmp_school);
        for(j=0;j<school_num;j++)
        {
            if(j==0)
                tmp1=tmp2=1;
            else
            {
                if(a[j].gold==a[j-1].gold&&a[j].silver==a[j-1].silver&&a[j].copper==a[j-1].copper)
                    tmp2=tmp1;
                else
                    tmp2=j+1;
            }
            printf("%s %ld %ld %ld %ld\n",a[j].name,tmp2,a[j].gold,a[j].silver,a[j].copper);            
            qsort(a[j].tt,a[j].team_num,sizeof(a[j].tt[0]),cmp_team);            
            tmp1=tmp2;
            printf("    team number: %ld\n",a[j].team_num);
            for(k=0;k<a[j].team_num;k++)
            {
                if(k==0)
                    temp1=temp2=1;
                else
                {
                    if(a[j].tt[k].gold==a[j].tt[k-1].gold&&a[j].tt[k].silver==a[j].tt[k-1].silver&&a[j].tt[k].copper==a[j].tt[k-1].copper)
                    {
                        temp2=temp1;
                    }
                    else
                        temp2=k+1;
                }
                printf("    %s %ld %ld %ld %ld\n",a[j].tt[k].name,temp2,a[j].tt[k].gold,a[j].tt[k].silver,a[j].tt[k].copper);
                temp1=temp2;
            }
        }
        printf("****************\n\n");
        printf("contest number: %ld\n",contest_num);
        qsort(di,contest_num,sizeof(di[0]),cmp_contest);
        for(j=0;j<contest_num;j++)
        {
            printf("%s %ld %ld %ld\n",di[j].name,di[j].gold,di[j].silver,di[j].copper);
        }
        printf("****************\n");
    }
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -