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

CodeForces 19A World Football Cup (简单题)

2017年11月16日 ⁄ 综合 ⁄ 共 1465字 ⁄ 字号 评论关闭

题目类型  简单题

题目意思
输入 n (1 <= n <=50, 且 n 为偶数) 支足球队的队名和各个队与其他队比赛一场后的比分, 按字典序输出最终排在前面 n / 2支队的队名
排名首先看得分情况 (比赛结果中 赢的一方得3分 输的一方得0分 | 平手情况两队各得一分)
如果得分相同就看 (进球数 - 失球数) 的值, 如果还是相同就看进球数 (都是大的排在前面)

解题方法
成功输入数据后, 统计数据, 最后排序输出即可 (详情看代码)
附 :
STL(98) 在 ACM 中的应用   还没了解的同学都看下 -> 中文简洁版 | STL in ACM | 英文完全版第一部分 英文完全版第二部分
参考代码 - 有疑问的地方在下方留言 看到会尽快回复的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <set>
#include <algorithm>

using namespace std;

char str[100][100];
char s[100];
char s1[100], s2[100];
struct P {
  string name;
  int s;
  int w, l;
}p[110];

bool cmp(const P & a, const P & b ) {
  if(a.s == b.s) {
    if(a.w - a.l == b.w - b.l) {
      return a.w > b.w;
    }
    else return a.w - a.l > b.w - b.l;
  }
  return a.s > b.s;
}

bool cmp2(const P & a, const P & b) {
  return a.name < b.name;
}

int main() {
  int n, a, b;
  while(scanf("%d", &n) != EOF) {
    map<string,int>mm;
    map<string,int>w;
    map<string,int>l;
    set<string>name;
    set<string>::iterator ps;
    for( int i=0; i<n; i++ ) {
      scanf("%s", str[i]);
    }
    for( int i=0; i<n*(n-1)/2; i++ ) {
      scanf("%s", s);
      int len = strlen(s), k1 = 0, k2 = 0;
      bool f = 0;
      for( int i=0; i<len; i++ ) {
        if(s[i] == '-') {
          f = 1;
          continue;
        }
        if(f) s2[k2++] = s[i];
        else s1[k1++] = s[i];
      }
      s1[k1] = '\0', s2[k2] = '\0';
      scanf("%d:%d", &a, &b);
      string ts1 = s1;
      string ts2 = s2;
      if(name.find(ts1) == name.end()) name.insert(ts1);
      if(name.find(ts2) == name.end()) name.insert(ts2);
      w[ts1] += a; l[ts1] += b;
      w[ts2] += b; l[ts2] += a;
      if(a > b) mm[ts1] += 3;
      else if(a == b) mm[ts1]++, mm[ts2]++;
      else mm[ts2] += 3;
    }
    int k = 0;
    for( ps=name.begin(); ps != name.end(); ps++ ) {
      p[k].name = *ps;
      p[k].s = mm[*ps];
      p[k].w = w[*ps];
      p[k].l = l[*ps];
      k++;
    }
    sort(p, p + k, cmp);
    sort(p, p + n/2, cmp2);
    for( int i=0; i<n/2; i++ ) cout<<p[i].name<<endl;
  }
  return 0;
}

抱歉!评论已关闭.