您的位置:首页 > 其它

uva 10194 - Football (aka Soccer)

2013-12-31 10:42 741 查看
又是wa,有点搞不懂

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
typedef struct infoteam{
string name;
int games;
int point;
int win;
int tie;
int lose;
int difference;
int score;
int against;
infoteam(){
games=0;
win=0;
tie=0;
lose=0;
score=0;
against=0;
}
void getpoint(){
point=3*win+tie;
}
void getdifference(){
difference=score-against;
}
}infoteam;
int cmp(const void *f1,const void* f2){
infoteam* a=(infoteam*)f1;
infoteam* b=(infoteam*)f2;
if(a->point!=b->point)
return b->point-a->point;
if(a->win!=b->win)
return b->win-a->win;
if(a->difference!=b->difference)
return b->difference-a->difference;
if(a->score!=b->score)
return b->score-a->score;
if(a->games!=b->games)
return a->games-b->games;
return a->name>b->name;
}
int main(){
int n;
cin>>n;
getchar();
vector<string> v_teanname;
while(n--){
string s_gamename;
getline(cin,s_gamename);
int i_teamnum;
cin>>i_teamnum;
getchar();
infoteam* str_info=new infoteam[i_teamnum];
for(int i=0;i<i_teamnum;i++){
string temp;
getline(cin,temp);
str_info[i].name=temp;
//v_teanname.push_back(temp);
}
int i_gamenum;
cin>>i_gamenum;
getchar();
while(i_gamenum--){
string temp;
getline(cin,temp);
int start,middle,end,ateam,bteam;
start=temp.find("#",0);
for(int i=0;i<i_teamnum;i++){
if(str_info[i].name==temp.substr(0,start)){
ateam=i;
break;
}
}
middle=temp.find("@",0);
end=temp.find("#",middle);
for(int i=0;i<i_teamnum;i++){
if(str_info[i].name==temp.substr(end+1)){
bteam=i;
break;
}
}
int a=atoi(const_cast<char*>(temp.substr(start+1,middle).c_str()));
int b=atoi(const_cast<char*>(temp.substr(middle+1,end).c_str()));
str_info[ateam].score+=a;
str_info[ateam].against+=b;
str_info[bteam].score+=b;
str_info[bteam].against+=a;
str_info[ateam].games+=1;
str_info[bteam].games+=1;
if(a==b){
str_info[ateam].tie+=1;
str_info[bteam].tie+=1;
}
else{
(a>b)?(str_info[ateam].win+=1,str_info[bteam].lose+=1):(str_info[ateam].lose+=1,str_info[bteam].win+=1);
}
}
for(int i=0;i<i_teamnum;i++){
str_info[i].getdifference();
str_info[i].getpoint();
}
qsort(str_info,i_teamnum,sizeof(infoteam),cmp);
cout<<s_gamename<<endl;
for(int i=0;i<i_teamnum;i++){
cout<<i+1<<") "<<str_info[i].name<<" "<<str_info[i].point<<"p, "<<
str_info[i].games<<"g ("<<str_info[i].win<<"-"<<str_info[i].tie<<
"-"<<str_info[i].lose<<"), "<<str_info[i].difference<<"gd ("<<
str_info[i].score<<"-"<<str_info[i].against<<")"<<endl;
}
if(n!=0)
cout<<endl;
delete[] str_info;
}
//system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: