这题有个很大的坑点:it must be done case insenstive.这句话的意识在这里是部分大小写,交了俩发WA,感觉自己没什么错的,
看了下别人的,发现最后面的排序部分大小写,真的坑。另外写代码的时候发现,getline(cin,string)一直崩溃,不知道为什么,
然后就把string改成了char字符数组,用gets输入,一直以为是getline()有什么问题,后来看到别人写的并不是,好像是我上面用的
memset(tem,0,sizeof(tem))对结构体中的字符串同时造成了影响,是下面的getline崩溃了,另外getline并不会吸收他前面的回车,
但是会吸收后面的回车,所以当你输入一个整数后,记得getchar()。
#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<map>
#include<set>
#include<cmath>
#include<cstring>
#include<cctype>
#include<climits>
#include<memory>
using namespace std;
#define LL long long
#define INT (1<<31)-1;
const int N=5000;
struct team
{
//char s[40];
string s;
int b,c,d,e,f,g,h,i;
}tem[40];
int t;
int find(string s)
{
// cout<<"fail"<<endl;
for(int i=0;i<t;i++)
if(tem[i].s==s)
return i;
}
int cmp(team x,team y)
{
if(x.b!=y.b)
return x.b>y.b;
else if(x.d!=y.d)
return x.d>y.d;
else if(x.g!=y.g)
return x.g>y.g;
else if(x.h!=y.h)
return x.h>y.h;
else if(x.c!=y.c)
return x.c<y.c;
string ta,tb;
for(int i=0;i<x.s.length();i++)
ta+=toupper(x.s[i]);
for(int i=0;i<y.s.length();i++)
tb+=toupper(y.s[i]);
return ta<tb;
}
int main()
{
int n;
cin>>n;
getchar();
while(n--)
{
// memset(tem,0,sizeof(tem));
string s;
getline(cin,s);
cout<<s<<endl;
cin>>t;
getchar();
for(int i=0;i<t;i++)
{
getline(cin,tem[i].s);
tem[i].b=tem[i].c=tem[i].d=tem[i].e=tem[i].f=tem[i].g=tem[i].h=tem[i].i=0;
}
// for(int i=0;i<t;i++)
// cout<<tem[i].s<<endl;
int g;
cin>>g;
getchar();
while(g--)
{
// char ss[100];
string ss;
// gets(ss);
getline(cin,ss);
int i=0;
string p1,p2;
while(ss[i]!='#')
{
p1=p1+ss[i];
i++;
}
i++;
int num1=0,num2=0;
while(isdigit(ss[i]))
{
num1=num1*10+(ss[i]-'0');
i++;
}
i++;
while(isdigit(ss[i]))
{
num2=num2*10+(ss[i]-'0');
i++;
}
i++;
while(i!=ss.length())
{
p2=p2+ss[i];
i++;
}
// cout<<p1<<p2<<num1<<num2<<endl;
int n1=find(p1),n2=find(p2);
tem[n1].c++;
tem[n2].c++;
tem[n1].h+=num1;
tem[n1].i+=num2;
tem[n2].h+=num2;
tem[n2].i+=num1;
if(num1>num2)
{
tem[n1].d++;
tem[n2].f++;
tem[n1].b+=3;
}
else if(num1==num2)
{
tem[n1].e++;
tem[n2].e++;
tem[n1].b++;
tem[n2].b++;
}
else
{
tem[n2].d++;
tem[n1].f++;
tem[n2].b+=3;
}
}
for(int i=0;i<t;i++)
tem[i].g+=(tem[i].h-tem[i].i);
sort(tem,tem+t,cmp);
for(int i=0;i<t;i++)
{
cout<<i+1<<") ";
cout<<tem[i].s;
printf(" %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n",tem[i].b,
tem[i].c,tem[i].d,tem[i].e,tem[i].f,tem[i].g,tem[i].h,tem[i].i);
}
if(n)
cout<<endl;
}
return 0;
}