您的位置:首页 > 其它

hdu 1225 Football Score

2012-11-07 13:04 288 查看
   
简单的排序:

此代码是用vector和map做的,用tries应该还快一些

#include<stdio.h>

#include<string>

#include<string.h>

#include<map>

#include<vector>

#include<algorithm>

using namespace std;

struct  team{

 char name[100];

 int score;

 int kicked;

 int lost;

}ar[2000];

int n,now;

vector<string> p;

map<string,int> q;

int search(char *t){

 vector<string>::iterator
it;

 it=find(p.begin(),p.end(),t);

 if(it==p.end()){

  strcpy(ar[now].name,t);

  p.push_back(t);

  q[t]=now;

  return now++;

 }

 return q[t];

}

int cmp(team p,team q){

 if(p.score==q.score){

  if(p.kicked-p.lost==q.kicked-q.lost){

   if(p.kicked==q.kicked)

    return
strcmp(p.name,q.name)<0;

   return
p.kicked>q.kicked;

  }

  return
p.kicked-p.lost>q.kicked-q.lost;

 }

 return p.score>q.score;

}

int main(){

    int
i,t,a,b,x,y;

 char team1[100],team2[100],ch[5],S[50];

 while(scanf("%d",&n)!=EOF){

  now=0;

  p.clear();

  q.clear();

  for(i=0;i<n;i++){

   ar[i].kicked=0;

   ar[i].lost=0;

   ar[i].score=0;

  }

  t=n*(n-1);

  for(i=0;i<t;i++){

   scanf("%s%s%s%d:%d",team1,ch,team2,&a,&b);

   x=search(team1);y=search(team2);

   ar[x].kicked+=a;

   ar[y].kicked+=b;

   ar[x].lost+=b;

   ar[y].lost+=a;

   if(a>b){

    ar[x].score+=3;

   }

   else
if(a<b){

    ar[y].score+=3;

   }

   else{

    ar[x].score+=1;

    ar[y].score+=1;

   }

  }

  sort(ar,ar+n,cmp);

  for(i=0;i<now;i++)

   printf("%s
%d\n",ar[i].name,ar[i].score);

  printf("\n");

 }

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: