hdu 1225 Football Score

    簡單的排序:

此代碼是用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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章