zoukankan      html  css  js  c++  java
  • 10194 Football (aka Soccer)

    最近都没有做什么,很懒,也做不出来,干脆看别人的吧

    这份代码很漂亮

    #include <stdio.h>  
    #include <stdlib.h>  
    #include <string.h>  
    #include <ctype.h>  
      
    struct Teams  
    {  
        char name[35];  
        int a_rank,  
            b_point,  
            c_games,  
            d_wins,  
            e_ties,  
            f_losses,  
            g_dif,  
            h_sco,  
            i_aga;  
    }teams[35];  
    int n,t,g;  
    char tournament[110],line[110];  
      
    int getNamePos(char *name)  
    {  
        for(int i=0;i<t;i++)  
        {  
            if(strcmp(name,teams[i].name)==0)  
                return i;  
        }  
        return -1;  
    }  
      
    void deal(char *name1,char *name2,int goal1,int goal2)  
    {  
        int pos1,pos2;  
        pos1=getNamePos(name1);  
        pos2=getNamePos(name2);  
        teams[pos1].c_games++;  
        teams[pos2].c_games++;  
        teams[pos1].h_sco+=goal1;  
        teams[pos2].h_sco+=goal2;  
        teams[pos1].i_aga+=goal2;  
        teams[pos2].i_aga+=goal1;  
        if(goal1>goal2)  
        {  
            teams[pos1].d_wins++;  
            teams[pos2].f_losses++;  
        }  
        else if(goal1<goal2)  
        {  
            teams[pos2].d_wins++;  
            teams[pos1].f_losses++;  
        }  
        else  
        {  
            teams[pos1].e_ties++;  
            teams[pos2].e_ties++;  
        }  
    }  
      
    int cmp(const void *a,const void *b)  
    {  
        Teams team1=*(Teams *)a,team2=*(Teams *)b;  
        if(team1.b_point!=team2.b_point)  
            return team1.b_point<team2.b_point;  
        else if(team1.d_wins!=team2.d_wins)  
            return team1.d_wins<team2.d_wins;//细节决定成败,WA时,要首先检查一下自己的程序  
        else if(team1.g_dif!=team2.g_dif)  
            return team1.g_dif<team2.g_dif;  
        else if(team1.h_sco!=team2.h_sco)  
            return team1.h_sco<team2.h_sco;  
        else if(team1.c_games!=team2.c_games)  
            return team1.c_games>team2.c_games;  
        else   
        {  
            char f1[35];  
            char f2[35];  
            int i;  
            for(i=0;i<=strlen(team1.name);i++)  
                f1[i]=tolower(team1.name[i]);  
            for(i=0;i<=strlen(team2.name);i++)  
                f2[i]=tolower(team2.name[i]);  
            return strcmp(f1,f2);  
        }  
        return false;  
    }  
      
    int main()  
    {  
        /* 
        freopen("10194.in","r",stdin); 
        freopen("10194.out","w",stdout); 
        //*/  
        scanf("%d\n",&n);  
        while(n--)  
        {  
            memset(teams,0,sizeof(teams));  
            gets(tournament);  
            scanf("%d\n",&t);  
            for(int i=0;i<t;i++)  
                gets(teams[i].name);  
            scanf("%d\n",&g);  
            //printf("%d%d%d",n,t,g);  
            for(int i=0;i<g;i++)  
            {  
                gets(line);  
                int len=strlen(line);  
                char name1[35],name2[35];  
                int goal1=0,goal2=0;  
                int len1=0,len2=0;  
                int flag=0;  
                for(int j=0;j<len;j++)  
                {  
                    if(line[j]=='#' || line[j]=='@')  
                        flag++;  
                    else   
                    {  
                        switch(flag)  
                        {  
                        case 0:  
                            name1[len1++]=line[j];  
                            break;  
                        case 1:  
                            goal1=goal1*10+line[j]-'0';  
                            break;  
                        case 2:  
                            goal2=goal2*10+line[j]-'0';  
                            break;  
                        case 3:  
                            name2[len2++]=line[j];  
                            break;  
                        default:  
                            break;  
                        }  
                    }  
                }  
                name1[len1]='\0';  
                name2[len2]='\0';  
                deal(name1,name2,goal1,goal2);  
            }  
            for(int i=0;i<t;i++)  
            {  
                teams[i].b_point=3*teams[i].d_wins+1*teams[i].e_ties;  
                teams[i].g_dif=teams[i].h_sco-teams[i].i_aga;  
            }  
            qsort(teams,t,sizeof(teams[0]),cmp);//往后看,与C++中的sort()的效果正好相反  
            printf("%s\n",tournament);  
            for(int i=0;i<t;i++)  
                printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n",  
                i+1,teams[i].name,teams[i].b_point,teams[i].c_games,  
                teams[i].d_wins,teams[i].e_ties,teams[i].f_losses,  
                teams[i].g_dif,teams[i].h_sco,teams[i].i_aga);  
            if(n!=0)  
                printf("\n");  
        }  
        return 0;  
    } 
    
    #include<iostream>
    #include<sstream>
    #include<vector>
    #include<string>
    #include<algorithm>
    #include<cstdio>
    #include<cctype>
    using namespace std;
    
    struct Type
    {
        Type()
        {
            name_="";
            score_=win_=lose_=draw_=goal_=all_goal_=game_=0;
        }
        string name_;
        int score_,win_,lose_,draw_,goal_,all_goal_,game_;
    };
    
    int n;
    vector<Type> r;
    
    int Team(const string &team_name)
    {
        for(int i=0;i<n;i++)
            if(r[i].name_==team_name)
                return i;
    }
    
    bool cmp_1(const Type &a,const Type &b)
    {
        string aa(a.name_),bb(b.name_);
        for(int i=0;i<aa.size();i++)
            aa[i]=tolower(aa[i]);
        for(int i=0;i<bb.size();i++)
            bb[i]=tolower(bb[i]);
        return aa<bb;
    }
    bool cmp_2(const Type &a,const Type &b)
    {
        return a.game_<b.game_;
    }
    bool cmp_3(const Type &a,const Type &b)
    {
        return a.all_goal_>b.all_goal_;
    }
    bool cmp_4(const Type &a,const Type &b)
    {
        return a.goal_>b.goal_;
    }
    bool cmp_5(const Type &a,const Type &b)
    {
        return a.win_>b.win_;
    }
    bool cmp_6(const Type &a,const Type &b)
    {
        return a.score_>b.score_;
    }
    
    int main()
    {
        int T;
        cin>>T;
        getchar();
        bool first(true);
        while(T--)
        {
            string game_name;
            getline(cin,game_name);
            cin>>n;
            getchar();
            r.resize(n);
            for(int i=0;i<n;i++)
                getline(cin,r[i].name_);
            int g;
            cin>>g;
            getchar();
            string s;
            for(int i=0;i<g;i++)
            {
                getline(cin,s);
                int pos_1(s.find('#')),pos_2(s.rfind('#'));
                string team_1(s.substr(0,pos_1)),team_2(s.substr(pos_2+1));
                istringstream sin(s.substr(pos_1+1));
                int goal_1,goal_2;
                sin>>goal_1;
                char ch;
                sin>>ch;
                sin>>goal_2;
                int team_1_num(Team(team_1)),team_2_num(Team(team_2));
                r[team_1_num].all_goal_+=goal_1;
                r[team_1_num].goal_+=(goal_1-goal_2);
                r[team_1_num].game_++;
                r[team_2_num].all_goal_+=goal_2;
                r[team_2_num].goal_+=(goal_2-goal_1);
                r[team_2_num].game_++;
                if(goal_1>goal_2)
                {
                    r[team_1_num].score_+=3;
                    r[team_1_num].win_++;
                    r[team_2_num].lose_++;
                }
                else if(goal_1<goal_2)
                {
                    r[team_2_num].score_+=3;
                    r[team_2_num].win_++;
                    r[team_1_num].lose_++;
                }
                else
                {
                    r[team_1_num].score_++;
                    r[team_2_num].score_++;
                    r[team_1_num].draw_++;
                    r[team_2_num].draw_++;
                }
            }
    
            sort(r.begin(),r.end(),cmp_1);
            stable_sort(r.begin(),r.end(),cmp_2);
            stable_sort(r.begin(),r.end(),cmp_3);
            stable_sort(r.begin(),r.end(),cmp_4);
            stable_sort(r.begin(),r.end(),cmp_5);
            stable_sort(r.begin(),r.end(),cmp_6);
    
            if(first)
                first=false;
            else
                cout<<endl;
            cout<<game_name<<endl;
            for(int i=0;i<n;i++)
                printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n",i+1,r[i].name_.c_str(),r[i].score_,r[i].game_,r[i].win_,r[i].draw_,r[i].lose_,r[i].goal_,r[i].all_goal_,r[i].all_goal_-r[i].goal_);
    
            fill_n(r.begin(),n,Type());
        }
    
        return 0;
    }
    
  • 相关阅读:
    理解CSS定位中的overflow和visibility属性
    理解CSS定位中的position
    理解margin负值,实现经典布局
    理解CSS定位中的float
    CSS表格属性
    图解一步步安装SharePoint Foundation 2010
    Gladinet Cloud Desktop Professional License(专业版序列号)
    配置SharePoint Foundation 2010基于表单的验证支持
    快逸报表部署心得
    如何阅读公司财务报告
  • 原文地址:https://www.cnblogs.com/UnGeek/p/2595906.html
Copyright © 2011-2022 走看看