http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1135
好繁琐的一道模拟题 细节很重要 编译错误一次 把字符串结尾写错WA一次 多了getchar()WA一次 多了以空格PE一次 最后AC...3个多小时
用了一下map map还是很方便的
View Code
1 #include <iostream> 2 #include<map> 3 #include<stdio.h> 4 #include<string> 5 #include<string.h> 6 #include<stdlib.h> 7 using namespace std; 8 typedef struct node 9 { 10 int a,b,c,d,e,f,g,h,i; 11 char j[31]; 12 node() 13 { 14 a = 0; 15 b = 0; 16 c = 0; 17 d = 0; 18 e = 0; 19 f = 0; 20 g = 0; 21 h = 0; 22 i = 0; 23 } 24 }st; 25 map <string, int> ff; 26 int cmp(const void *x,const void *y) 27 { 28 if(((st *)x)->b!=((st *)y)->b) 29 return ((st *)y)->b-((st *)x)->b; 30 else 31 if(((st *)x)->d!=((st *)y)->d) 32 return (((st *)y)->d-((st *)x)->d); 33 else 34 if(((st *)x)->g!=((st *)y)->g) 35 return (((st *)y)->g-((st *)x)->g); 36 else 37 if(((st *)x)->h!=((st *)y)->h) 38 return (((st *)y)->h-((st *)x)->h); 39 else 40 if(((st *)x)->c!=((st *)y)->c) 41 return (((st *)x)->c-((st *)y)->c); 42 else 43 return strcasecmp(((st *)x)->j,((st *)y)->j); 44 45 } 46 int main() 47 { 48 int n,t,k,i,j; 49 char str[101],team[31][31],com[101],sw[101],cw[101],tw[101]; 50 cin>>n; 51 getchar(); 52 while(n--) 53 { 54 st q[101]; 55 gets(str); 56 cin>>t; 57 getchar(); 58 ff.clear(); 59 for(i = 0; i < t ; i++) 60 { 61 gets(team[i]); 62 ff[team[i]] = i; 63 strcpy(q[ff[team[i]]].j,team[i]); 64 } 65 cin>>k; 66 getchar(); 67 while(k--) 68 { 69 gets(com); 70 int temp; 71 for(i = 0 ; i < strlen(com) ; i++) 72 { 73 if(com[i]!='#') 74 sw[i]=com[i]; 75 else 76 { 77 temp = i; 78 break; 79 } 80 } 81 sw[temp] = '\0'; 82 q[ff[sw]].c++; 83 int o1 = 0,o2 = 0; 84 for(i = temp+1 ; i < strlen(com) ; i++) 85 { 86 if(com[i]!='@') 87 tw[o1++] = com[i]; 88 else 89 { 90 temp = i; 91 break; 92 } 93 } 94 tw[o1] = '\0'; 95 o1 = atoi(tw); 96 for(i = temp+1 ; i < strlen(com) ; i++) 97 { 98 if(com[i]!='#') 99 tw[o2++] = com[i]; 100 else 101 { 102 temp = i; 103 break; 104 } 105 } 106 tw[o2] = '\0'; 107 o2 = atoi(tw); 108 int o3 = 0; 109 for(i = temp+1; i < strlen(com) ; i++) 110 cw[o3++] = com[i]; 111 cw[o3]='\0'; 112 q[ff[cw]].c++; 113 q[ff[sw]].h += o1; 114 q[ff[sw]].i += o2; 115 q[ff[cw]].h += o2; 116 q[ff[cw]].i += o1; 117 if(o2>o1) 118 { 119 q[ff[cw]].d++; 120 q[ff[sw]].f++; 121 q[ff[cw]].b+=3; 122 } 123 else 124 if(o2<o1) 125 { 126 q[ff[sw]].d++; 127 q[ff[cw]].f++; 128 q[ff[sw]].b+=3; 129 } 130 else 131 { 132 q[ff[sw]].e++; 133 q[ff[cw]].e++; 134 q[ff[sw]].b++; 135 q[ff[cw]].b++; 136 } 137 } 138 cout<<str<<endl; 139 for(i = 0 ; i < t ; i++) 140 q[i].g = q[i].h-q[i].i; 141 qsort((void *)q,t,sizeof(q[0]),cmp); 142 for(i = 0 ; i < t ; i++) 143 { 144 cout<<i+1<<") "<<q[i].j<<" "<<q[i].b<<"p, "<<q[i].c<<"g ("<<q[i].d<<"-"<<q[i].e<<"-"<<q[i].f<<"), "<<q[i].h-q[i].i<<"gd ("<<q[i].h<<"-"<<q[i].i<<")"<<endl; 145 } 146 147 if(n!=0) 148 puts(""); 149 } 150 return 0; 151 }