现在的位置: 首页 > 综合 > 正文

CodeForce 19A World Football Cup (string类应用)

2013年07月22日 ⁄ 综合 ⁄ 共 1295字 ⁄ 字号 评论关闭

十足水题,拿来练手速的,做完之后从别人那里学了点东西:

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;
}

 

抱歉!评论已关闭.