Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 942 Accepted Submission(s): 287
3 Manchester VS Portsmouth 3:0 Liverpool VS Manchester 1:1 Liverpool VS Portsmouth 0:0 Portsmouth VS Manchester 1:1 Manchester VS Liverpool 2:1 Liverpool VS Portsmouth 1:2
Manchester 8 Portsmouth 5 Liverpool 2Huge input, scanf is recommended.HintHint#include <iostream> #include <vector> #include <algorithm> using namespace std; #define N 1000 struct team { char name[35]; int point; int net_g; int all_g; }node[N]; int len; bool cmp(team a,team b) { if(a.point != b.point) return a.point>b.point; else { if(a.net_g != b.net_g) return a.net_g>b.net_g; else { if(a.all_g != b.all_g) return a.all_g>b.all_g; else { if(strcmp(a.name,b.name)<0) return true; else return false; } } } } int main() { int n,m,i,a,b; char ch[10],t1[100],t2[100]; while (scanf("%d",&n)!=EOF) { for(i=0;i<N;i++) { strcpy(node[i].name,""); node[i].point=0; node[i].net_g=0; node[i].all_g=0; } len=0; m=n*(n-1); while (m--) { scanf("%s",t1); scanf("%s",ch); scanf("%s",t2); scanf("%d:%d",&a,&b); if(len == 0) { strcpy(node[len].name,t1); strcpy(node[len+1].name,t2); if(a>b) { node[len].point+=3; node[len+1].point+=0; } else if(a==b) { node[len].point+=1; node[len+1].point+=1; } else { node[len].point+=0; node[len+1].point+=3; } node[len].net_g+=a-b; node[len+1].net_g+=b-a; node[len].all_g+=a; node[len+1].all_g+=b; len+=2; } else { int flag1=0,flag2=0; for(i=0;i<len;i++) { if(strcmp(node[i].name,t1)==0) { if(a>b) node[i].point+=3; else if(a==b) node[i].point+=1; else node[i].point+=0; node[i].net_g+=a-b; node[i].all_g+=a; flag1=1; } else if(strcmp(node[i].name,t2)==0) { if(b>a) node[i].point+=3; else if(a==b) node[i].point+=1; else node[i].point+=0; node[i].net_g+=b-a; node[i].all_g+=b; flag2=1; } } if(flag1==0) { strcpy(node[len].name,t1); if(a>b) node[len].point+=3; else if(a==b) node[len].point+=1; else node[len].point+=0; node[len].net_g+=a-b; node[len].all_g+=a; len++; } if(flag2==0) { strcpy(node[len].name,t2); if(b>a) node[len].point+=3; else if(a==b) node[len].point+=1; else node[len].point+=0; node[len].net_g+=b-a; node[len].all_g+=b; len++; } } } sort(node,node+len,cmp); for(i=0;i<len;i++) { printf("%s %d/n",node[i].name,node[i].point); } printf("/n"); } return 0; }