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;
}
相关文章推荐
- hdu 1225 Football Score
- hdu 1434 幸福列车
- hdu 2433 最短路树
- HDU:2044蜜蜂 解题报告
- HDU:1279 Children’s Queue 终于…
- HDU 1426 Sudoku Killer
- HDU 2191 悼念512汶川大地震遇难同…
- HDU 1162 Eddy's picture
- HDU 1533 Going Home (KM算法)
- HDU 2136 Largest prime factor
- HDU 1976 Software Version
- HDU 1326 Box of Bricks
- hdu&nbsp;4081&nbsp;最小生成树变形
- HDU How many prime numbers
- 简单的二叉树 hdu 3791
- hdu 2124 Repair the Wall(贪心算…
- hdu 2066(最短路径)
- hdu&nbsp;2147&nbsp;kiki&#039;s&nbsp;game(博奕)
- (HDU) 3999 The or…
- hdu 2005 第几天? java版