转会-"中信软件教育杯" 2011 湘潭市第三届邀请赛

来源:互联网 发布:java前后端分离原理 编辑:程序博客网 时间:2024/04/27 20:22

描述

转会是体育领域的专业名词,是指运动员在本身合同期限内,从某一家俱乐部或球队,通过俱乐部及个人双重合同达成协议,转至另外一家俱乐部或球队的过程。比如09年夏天,曼联与皇家马德里就C罗达成的9100万欧元转会费的世纪转会。

每年的转会市场都错综复杂,于是我们需要高效的程序来处理转会信息。

为了简化问题,我们对其进行如下假设:

在转会时间开始前,每个球队都会有若干名队员,并会有相应的转会预算。

转会时间开始后,程序会收到如下转会信息。

1.甲球队向乙球队申请某一位的乙队球员转会至甲队,并许诺支付一定的转会金额。

2.甲球队向乙球队出售一位甲队球员转会至乙队,并期望获得一定的转会金额。

当然,不是每一次转会才能获得成功。当出现以下情况的一种,转会将不会发生。

对于情况1,以下任意一种情况可导致转会失败:

甲队的转会预算已经低于许诺支付的转会金额。

甲队许诺的转会金额低于该球员的身价评估。

若转会成功,甲队的队员总数将大于11人。

不存在乙队。

不存在甲队。

乙队不存在该球员。

甲队和乙队是同一只球队。

对于情况2,以下任意一种情况可导致转会失败:

乙队的转会预算已经低于甲队希望获得的转会金额。

甲队期望的转会金额大于或者等于该球员的身价评估。

若转会成功,乙队的队员总数将大于11人。

4.不存在甲队。

5.不存在乙队。

6.甲队不存在该球员。

7.甲队和乙队是同一只球队。

若转会成功,则球员转入方获得该名球员,球员转出方的转会预算增加所获得的转会金额,球员转入方支付相应的转会金额(从转会预算里减去)。

基于一些转会的事实,以下事件应该被考虑:

当甲球队向乙球队求购乙队的A队员时。若转会失败,则乙队的A队员的身价将提高100.

当甲球队向乙球队推荐甲球队的A队员时。若转会失败,则队的A队员的身价将减少100(如果身价本身小于100,则不减少).

无论何时,若转会发生,则转会球员的身价评估变为本次转会的转会金额。

为了防止球员转会频率过高,而引起的转会纠纷。在球员发生转会后的,5条信息内(包括5条),所有针对该球员转会申请均会视为无效,即该次转会既不会获得成功转会,也不会对球员身价产生影响。

现在请你设计一个程序,判断每一条转会信息是否能获得转会成功。

输入

第一行有一个整数T(T <= 10),代表测试数据组数。

每组测试数据以一个整数n(n <= 10)开始,代表当前球队数目。

接下去给出每支球队的信息,如下。

第一行有一个字符串teamName(长度不超过11个字符)和两个整数numOfPlayers,money.

代表这只球队的名字,和球员数目和转会预算.

接下去numOfPlayers行,每行有一个字符串和一个整数.代表每个球员的姓名和他的身价评估.

当所有的球队信息都给完后.将给出所有的转会信息.

首先是一个整数Q(Q <= 100),代表消息总数.

接下去Q行每行给出该条转会信息的具体内容.

消息的格式如下.

Type team1 team2 player money.

若type 为1 ,则代表team1向team2以money的价格申请player转会。

若type 为2,则代表team1 试图将player 转会至team2,并期望获得money(money <= 10000)的转会金额.

所有的字符串均唯一,且仅包含字母.

输出

对于每一组数据输转会结果,若转会成功.则输出:

Player go to TeamNow from TeamBefore for money.

其中player代表转会球员名,TeamNow代表转会去向球队,TeamBefore代表原球队,money为本次转会金额.

若转会不成功.则输出:No.

注意每句话后有英文句号!

样例输入

1
2
ReadMadrid 11 5000
Casillas 3500
Ronaldo 9100
Benzema 4000
Higuaín 3500
Pepe 3000
Dudek 1000
Albiol 2500
Garay 1000
Alonso 3500
Oezil 3500
Khedira 1800
Barcelona 10 4000
Baldes 2500
Villa 3800
Messi 9000
Keita 2500
Xavi 4000
Puyol 4000
Alves 3800
Maxwell 4000
Iniesta 4000
Mascherano 3000
4
1 Barcelona ReadMadrid Ronaldo 3500
2 Barcelona ReadMadrid Iniesta 1000
1 Barcelona ReadMadrid Benzema 4000
1 ReadMadrid Barcelona Messi 9000

样例输出

No.
No.
Benzema go to Barcelona from ReadMadrid for 4000.
Messi go to ReadMadrid from Barcelona for 9000.

这题花了我两天的时间,题目是挺长的,主要就看细不细心,代码还有许多要优化的地方就不改了,本来就晕头转向的做出来的

#include<iostream>#include<cstring>#include<cstdio>using namespace std;int t,n,i,j,m,type,money;char team1[20],team2[20],player[20];int qdui1,qyuan1,ysuan1;int qdui2,qyuan2,ysuan2;typedef struct qiuyuan{    char name[20];    int m;    int sum;}qy[1000];struct qiudui{    char teamName[20];    int numOfPlayers,money;    qy Q;};struct qiudui qd[2000];int cz1(char a[]){    for(i=1;i<=n;i++)    {        if(strcmp(qd[i].teamName,a)==0)return i;    }    return -1;}int cz2(char a[],int i){    for(j=1;j<=qd[i].numOfPlayers;j++)    {        if(strcmp(qd[i].Q[j].name,a)==0)            return j;    }    return -1;}int cz3(){    for(int i=1;i<=n;i++)    for(j=1;j<=qd[i].numOfPlayers;j++)    {        if(qd[i].Q[j].sum>0)qd[i].Q[j].sum--;    }    return 0;}int ken(int qdui,int qyuan){    //qd[qdui].Q[qyuan].m=money;    qd[qdui].Q[qyuan].m+=100;}int ken1(int qdui,int qyuan){    //qd[qdui].Q[qyuan].m=money;    if(qd[qdui].Q[qyuan].m>=100)    qd[qdui].Q[qyuan].m-=100;}int fun1(){    qdui1=cz1(team1);    qdui2=cz1(team2);    qyuan2=cz2(player,qdui2);    if(qdui1==qdui2){return 0;}    cz3();    if(qdui1==-1||qdui2==-1)return 0;    if(qyuan2==-1)return 0;    if((qd[qdui2].Q[qyuan2].sum--)>1)return 0;    if(qd[qdui1].money<money){ken(qdui2,qyuan2);return 0;}    if(money<qd[qdui2].Q[qyuan2].m){ken(qdui2,qyuan2);return 0;}    if(qd[qdui1].numOfPlayers>=11){ken(qdui2,qyuan2);return 0;}    //以下是转入成功的时候    qd[qdui2].Q[qyuan2].sum=5;    return 1;}int fun2(){    qdui1=cz1(team1);    qdui2=cz1(team2);    qyuan1=cz2(player,qdui1);    cz3();    if(qdui1==-1||qdui2==-1)return 0;    if(qyuan1==-1)return 0;    if((qd[qdui1].Q[qyuan1].sum--)>1)return 0;    if(qdui1==qdui2){return 0;}    if(qd[qdui2].money<money){ken1(qdui1,qyuan1);return 0;}    if(money>=qd[qdui1].Q[qyuan1].m){ken1(qdui1,qyuan1);return 0;}    if(qd[qdui2].numOfPlayers>=11){ken1(qdui1,qyuan1);return 0;}    //以下是转入成功的时候     qd[qdui1].Q[qyuan1].sum=5;     return 1;}int main(){    cin>>t;    while(t--)    {        cin>>n;        memset(qd,0,sizeof(qd));       // memset(qiuyuan,0,sizeof(qiuyuan));        for(i=1;i<=n;i++)        {            cin>>qd[i].teamName>>qd[i].numOfPlayers>>qd[i].money;            for(j=1;j<=qd[i].numOfPlayers;j++)            {                cin>>qd[i].Q[j].name>>qd[i].Q[j].m;                qd[i].Q[j].sum=0;            }        }        cin>>m;        for(int ii=1;ii<=m;ii++)        {            cin>>type>>team1>>team2>>player>>money;            if(type==1)            {                if(fun1())                {                    printf("%s go to %s from %s for %d.\n",qd[qdui2].Q[qyuan2].name,qd[qdui1].teamName,qd[qdui2].teamName,money);                      {        strcpy(qd[qdui1].Q[++qd[qdui1].numOfPlayers].name,qd[qdui2].Q[qyuan2].name);        qd[qdui1].Q[qd[qdui1].numOfPlayers].m=money;        qd[qdui1].Q[qd[qdui1].numOfPlayers].sum=qd[qdui2].Q[qyuan2].sum;      }    for(i=qyuan2;i<=qd[qdui2].numOfPlayers-1;i++)        strcpy(qd[qdui2].Q[i].name,qd[qdui2].Q[i+1].name);    qd[qdui2].numOfPlayers--;    qd[qdui1].money-=money;    qd[qdui2].money+=money;                }                else cout<<"No."<<endl;            }            else if(type==2)            {                if(fun2())                {                    printf("%s go to %s from %s for %d.\n",qd[qdui1].Q[qyuan1].name,qd[qdui2].teamName,qd[qdui1].teamName,money);                {        strcpy(qd[qdui2].Q[++qd[qdui2].numOfPlayers].name,qd[qdui1].Q[qyuan1].name);        qd[qdui2].Q[qd[qdui2].numOfPlayers].m=money;        qd[qdui2].Q[qd[qdui2].numOfPlayers].sum=qd[qdui1].Q[qyuan1].sum;    }    for(i=qyuan1;i<=qd[qdui1].numOfPlayers-1;i++)        strcpy(qd[qdui1].Q[i].name,qd[qdui1].Q[i+1].name);    qd[qdui1].numOfPlayers--;    qd[qdui2].money-=money;    qd[qdui1].money+=money;                }                else cout<<"No."<<endl;            }        }    }    return 0;}


0 0
原创粉丝点击