解法:stringstream+map想复杂了,其实可以很简单(用sscanf就好)!
#include<bits/stdc++.h>
using namespace std;
struct Team
{
double val;
int dz;
string dm;
};
bool cmp(Team a,Team b)
{
if(a.val!=b.val)
return a.val>b.val;
else if(a.dz!=b.dz)
return a.dz>b.dz;
else
return a.dm<b.dm;
}
int main()
{
int n;
while(cin>>n,n)
{
getchar();
map<string,int>pq;
Team que[105];
string str;
int r,sum;
for(int i=0;i<n;i++)
{
string buf;
int k=0;
getline(cin,str);
stringstream ss(str);
while(ss>>buf)
k++;
stringstream st(str);
int j=1,pos,pos1=0,w=0,sum=0;//pos1要初始化
while(st>>buf)
{
int len=buf.size();
if(j==1)
que[i].dm=buf;
else if(j<=(k+1)/2)
{
if(buf[len-1]==')'&&buf[len-2]=='C')
pos=j;
if(buf[len-1]==')'&&buf[len-2]=='R')
pos1=j;
}
else
{
r=0;
for(int v=0;v<len;v++)
r=r*10+(buf[v]-'0');
if(j==pos+k/2)
que[i].dz=r;
if(j!=pos1+k/2)//如果pos1不初始化就有问题
{
sum+=r;
w++;
}
}
j++;
}
que[i].val=(1.0*sum)/w;
}
sort(que,que+n,cmp);
for(int i=0;i<n;i++)
pq[que[i].dm]=i+1;
cout<<pq["Archimedes"]<<"\n";
}
return 0;
}