CodeForce 19A World Football Cup (string类应用)
十足水题,拿来练手速的,做完之后从别人那里学了点东西:
STL的string类中有如下用于查找的函数
find_first_of (char *s,int pos)
//从pos开始查找第一个s字符集的某字符出现在串中的位置,成功时返回所在位置
find_last_of
find_first_not_of
find_last_not_of
题意:足球比赛,给出n(保证是偶数)支队伍的队名和的对阵结果,有一半的队伍出线,按照字典序输出出线的队伍。排序规则:得分胜3平1负0,分数相等比较净胜球,净胜球相等比较进球数。
#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
struct Data
{
int num;
string name;
int dif,score;
Data () {num=0,dif=0,score=0;}
~Data () {}
bool operator < (const Data& b) const
{
if (num!=b.num) return num>b.num;
else if (dif!=b.dif) return dif>b.dif;
else if (score!=b.score) return score>b.score;
return false;
}
}data[105];
bool cmp (const Data &a,const Data &b)
{
if (a.name<b.name) return true;
return false;
}
char str[105],str2[105];
int n;
map<string,int> mp;
void In ()
{
int i;
scanf("%s",str);
for (i=0;true;i++)
if (str[i]=='-')
{
str[i]=0;
break;
}
strcpy(str2,str+i+1);
}
int main ()
{
while (~scanf("%d",&n))
{
int i;
mp.clear();
for (i=0;i<n;i++)
{
cin>>data[i].name;
mp[ data[i].name ]=i;
}
int a,b,id1,id2;
for (i=1;i<=n*(n-1)/2;i++)
{
In ();
scanf("%d:%d",&a,&b);
id1=mp[str];
id2=mp[str2];
data[id1].score+=a;
data[id1].dif+=a-b;
data[id2].score+=b;
data[id2].dif+=b-a;
if (a>b)
data[id1].num+=3;
else if (a<b)
data[id2].num+=3;
else if (a==b)
data[id1].num+=1,data[id2].num+=1;
}
sort(data,data+n);
sort(data,data+n/2,cmp);
for (i=0;i<n/2;i++)
cout<<data[i].name<<endl;
}
return 0;
}
还没有评论,来说两句吧...