YTU-OJ-Problem E:ABプログラミング問題-ワールドカップ1次リーグ


Problem E:ABプログラミング問題-ワールドカップグループリーグ
Time Limit: 1 Sec  
Memory Limit: 128 MB
Submit: 85  
Solved: 25
[ Submit][ Status][ Web Board]
Description
注意:このテーマは自由に設計されていますが、クラスを使用してコード設計を行う必要があります.
ワールドカップの32チームの参加チームは8つのグループに分けられ、各グループにはそれぞれ4つのチームが試合を行い、各チームは他の3つのチームと1試合しか行わなければならず、各グループの4つのチームが循環試合を行い、6試合(a 1-a 2;a 1-a 3;a 1-a 4;a 2-a 3;a 2-a 4;a 3-a 4)を行い、各試合は90分、勝平敗はそれぞれ3、1、0点を蓄積した.各グループのポイントの上位2チームがトーナメント1/8決勝に進出し、16チーム「16強」となった.
各グループにはそれぞれ4つのチームがあり、その順位は以下の規則によって確定される:a、ポイントの高い者は上位b、グループの総純勝球の高い者は上位c、グループの総ゴール数の高い者は上位d、得点が確定しないということは、ゴール数(正数)と失点数です(正数)の差.例えば、赤チーム勝黄チーム4:2、青チーム勝黄チーム3:1、赤チーム負青チーム2:3赤チーム進6球、失5球、純勝球数:6-5=1黄チーム進3球、失7球、純勝球数:3-7=-4青チーム進6球、失3球、純勝球数:6-3=3//以下は参考コード#include#include#includeusing namespace std; class FootballGroup{private:int score[4];//総ポイントint goaldiff[4];//総純勝球int totalgoals[4];//総ゴール数string teamname[4];//チーム名public:FootballGroup(){for(int i=0;i<4;i+){score[i]=goaldiff[i]=0;}}void setTeamName(int teamindex,string name)//teamindex+1チーム目のチーム名{teamname[teamindex]=nameを設定する;    }     void addMatchresult(int teamindex1,int teamindex2,int score1,int score2);     void showResult(); }; int main(){FootballGroup Group Group Group;string name;int i,j;for(i=0;i<4;i+){cin>>name;Group A.setTeamName(i,name);//チームa 1,a 2,a 3,a 4の名前}int score 1,score 2;    for(i=0; i<3; i++)//a1-a2;a1-a3;a1-a4;a2-a3;a2-a4;a 3-a 4 for(j=i+1;j<4;j++){cin>>score 1>>score 2;//両チームのスコアGroupA.addMatchresult(i,j,score 1,score 2);        }     GroupA.showResult();     return 0; }
Input
第1行4チームの名称第2行から第7行まで、6試合のスコア(a 1-a 2;a 1-a 3;a 1-a 4;a 2-a 3;a 2-a 4;a 2-a 4;a 3-a 4)
Output
トーナメントに進出した両チームは、確定できなければ「NO」を出す
Sample Input
a1 a2 a3 a4
1 2
0 0
2 3
3 1
2 2
1 2

Sample Output
a2 a4

HINT
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;

class FootballGroup
{
private:
    int score[4]; //   
    int goaldiff[4]; //    
    int totalgoals[4]; //    
    string teamname[4] ; //     
public:
    FootballGroup()
    {
        for(int i=0; i<4; i++)
        {
            score[i]=goaldiff[i]=totalgoals[i]=0;
        }
    }
    void swap(int *s,int *ss,int *g,int *gg,int *t,int *tt,string *n,string *nn)
    {
        int m;
        string str;
        m=*s;
        *s=*ss;
        *ss=m;
        m=*g;
        *g=*gg;
        *gg=m;
        m=*t;
        *t=*tt;
        *tt=m;
        str=*n;
        *n=*nn;
        *nn=str;
    }
    void setTeamName(int teamindex,string name)  //   teamindex+1     
    {
        teamname[teamindex] = name;
    }
    void addMatchresult(int teamindex1,int teamindex2,int score1,int score2)
    {
        totalgoals[teamindex1]+=score1;
        totalgoals[teamindex2]+=score2;
        if(score1>score2)
        {
            goaldiff[teamindex1]+=(score1-score2);
            score[teamindex1]+=3;
        }
        else if(score1<score2)
        {
            goaldiff[teamindex2]+=(score2-score1);
            score[teamindex2]+=3;
        }
        else
        {
            score[teamindex1]+=1;
            score[teamindex2]+=1;
        }
    }
    void showResult()
    {
        int i,j;
        for(i=0; i<3; i++)
            for(j=i+1; j<4; j++)
                if(score[j]>score[i])
                    swap(&score[i],&score[j],&goaldiff[i],&goaldiff[j],&totalgoals[i],&totalgoals[j],&teamname[i],&teamname[j]);
        if(score[1]!=score[2])
            cout<<teamname[0]<<" "<<teamname[1]<<endl;
        else if (score[0]!=score[1]&&score[1]==score[2]&&score[2]!=score[3])
        {

            for(i=1; i<2; i++)
                for(j=i+1; j<3; j++)
                {
                    if(goaldiff[j]>goaldiff[i])
                        swap(&score[i],&score[j],&goaldiff[i],&goaldiff[j],&totalgoals[i],&totalgoals[j],&teamname[i],&teamname[j]);
                }
            if (goaldiff[1]!=goaldiff[2])
            {
                cout<<teamname[0]<<" "<<teamname[1]<<endl;
            }
            else
            {
                if (totalgoals[1]>totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[1]<<endl;
                else if(totalgoals[1]<totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[2]<<endl;
                else
                    cout<<"NO"<<endl;
            }
        }
        else if (score[0]!=score[1]&&score[1]==score[2]&&score[2]==score[3])
        {

            for(i=1; i<3; i++)
                for(j=i+1; j<4; j++)
                {
                    if(goaldiff[j]>goaldiff[i])
                        swap(&score[i],&score[j],&goaldiff[i],&goaldiff[j],&totalgoals[i],&totalgoals[j],&teamname[i],&teamname[j]);
                }
            if (goaldiff[1]!=goaldiff[2])
            {
                cout<<teamname[0]<<" "<<teamname[1]<<endl;
            }
            else if (goaldiff[1]==goaldiff[2]&&goaldiff[2]!=goaldiff[3])
            {
                if (totalgoals[1]>totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[1]<<endl;
                else if(totalgoals[1]<totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[2]<<endl;
                else
                    cout<<"NO"<<endl;
            }
            else if (goaldiff[1]==goaldiff[2]&&goaldiff[2]==goaldiff[3])
            {
                for(i=1; i<3; i++)
                    for(j=i+1; j<4; j++)
                    {
                        if(totalgoals[j]>totalgoals[i])
                            swap(&score[i],&score[j],&goaldiff[i],&goaldiff[j],&totalgoals[i],&totalgoals[j],&teamname[i],&teamname[j]);
                    }
                if (totalgoals[1]!=totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[1]<<endl;
                else
                    cout<<"NO"<<endl;
            }
        }
        else if(score[1]==score[2]&&score[0]==score[1]&&score[2]==score[3])
        {
            for(i=0; i<3; i++)
                for(j=i+1; j<4; j++)
                {
                    if(goaldiff[j]>goaldiff[i])
                        swap(&score[i],&score[j],&goaldiff[i],&goaldiff[j],&totalgoals[i],&totalgoals[j],&teamname[i],&teamname[j]);
                }
            if(goaldiff[1]!=goaldiff[2])
            {
                cout<<teamname[0]<<" "<<teamname[1]<<endl;
            }
            else if (goaldiff[0]!=goaldiff[1]&&goaldiff[1]==goaldiff[2]&&goaldiff[2]!=goaldiff[3])
            {

                if (totalgoals[1]>totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[1]<<endl;
                else if(totalgoals[1]<totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[2]<<endl;
                else
                    cout<<"NO"<<endl;
            }
            else if (goaldiff[0]!=goaldiff[1]&&goaldiff[1]==goaldiff[2]&&goaldiff[2]==goaldiff[3])
            {
                for(i=1; i<3; i++)
                    for(j=i+1; j<4; j++)
                    {
                        if(totalgoals[j]>totalgoals[i])
                            swap(&score[i],&score[j],&goaldiff[i],&goaldiff[j],&totalgoals[i],&totalgoals[j],&teamname[i],&teamname[j]);
                    }
                if (totalgoals[1]!=totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[1]<<endl;
                else
                    cout<<"NO"<<endl;
            }
            else if(goaldiff[0]==goaldiff[1]&&goaldiff[1]==goaldiff[2]&&goaldiff[2]!=goaldiff[3])
            {

                for(i=0; i<2; i++)
                    for(j=i+1; j<3; j++)
                    {
                        if(totalgoals[j]>totalgoals[i])
                            swap(&score[i],&score[j],&goaldiff[i],&goaldiff[j],&totalgoals[i],&totalgoals[j],&teamname[i],&teamname[j]);
                    }
                if(totalgoals[0]!=totalgoals[1]&&totalgoals[1]!=totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[1]<<endl;
                else
                    cout<<"NO"<<endl;
            }
            else if(goaldiff[0]==goaldiff[1]&&goaldiff[1]==goaldiff[2]&&goaldiff[2]==goaldiff[3])
            {
                for(i=0; i<3; i++)
                    for(j=i+1; j<4; j++)
                    {
                        if(totalgoals[j]>totalgoals[i])
                            swap(&score[i],&score[j],&goaldiff[i],&goaldiff[j],&totalgoals[i],&totalgoals[j],&teamname[i],&teamname[j]);
                    }
                if(totalgoals[1]!=totalgoals[2])
                    cout<<teamname[0]<<" "<<teamname[1]<<endl;
                else
                    cout<<"NO"<<endl;
            }
        }
    }
};
int main()
{
    FootballGroup GroupA;
    string name;
    int i,j;
    for(i=0; i<4; i++)
    {
        cin>>name;
        GroupA.setTeamName(i,name); //  a1,a2,a3,a4   
    }
    int score1,score2;
    for(i=0; i<3; i++) //a1-a2;a1-a3;a1-a4;a2-a3;a2-a4;a3-a4
        for(j=i+1; j<4; j++)
        {
            cin>>score1>>score2; //     
            GroupA.addMatchresult(i,j,score1,score2);
        }
    GroupA.showResult();
    return 0;
}