sincerit 送气球.jpg

链接:https://ac.nowcoder.com/acm/contest/318/A
来源:牛客网

题目描述
ACM-ICPC程序设计大赛是大学级别最高的脑力竞赛,素来被冠以"程序设计的奥林匹克"的尊称。大赛至今已有近40年的历史,是世界范围内历史最悠久、规模最大的程序设计竞赛。比赛形式是:从各大洲区域预赛出线的参赛队伍,于指定的时间、地点参加世界级的决赛,由1个教练、3个成员组成的小组应用一台计算机解决7到13个生活中的实际问题。在正式赛场中,一个队伍每解决一个新的问题就会有一个相应的气球作为奖励送到这个队伍所在的位置。
Dillonh作为这次ACM-ICPC的志愿者,当然是时刻关注着场上的过题情况的,每当有一个队伍通过新的问题的时候,他就会马上送上气球。但由于参赛队伍实在是太多了,他也不清楚每个队伍得到了多少个气球。在比赛结束之后,他拿到了一份这场比赛的题目提交情况,他想知道现场参加比赛的队伍每个队伍能获得气球,聪明的你能帮帮他吗?

输入描述:
第一行包含一个整数T(T≤10),表示总共有T组测试样例;
第二行输入一个整数n,m;
n表示有多少个队伍参加这次的比赛(1≤n≤50);
m表示有多少条提交记录(1≤m≤1000);
接下来输入m行,每行输入格式如下:
team_id problem_id submit_status
team_id 代表着队伍的编号(1 <= team_id <= n);problem_id代表着题目编号(为A~M的大写字母);submit_status代表着这个题目提交的结果(可能是"AC",“PE”,“TLE”,“MLE”,“WA”,“RE”,"CE"其中的一种)。
hint:每次提交只有提交结果是"AC"的题目才可以得到气球。如果一个队伍如果通过同一个题目多次,他也只能获得一个气球。
在这里插入图片描述
输出描述:
对于每组样例
第一行输出一行“Case #x:”,x表示当前为第几组样例(详细见样例);
第二行输出n个数(每两个数之间用空格隔开)代表着第 i 个队可以获得的气球数量。(注意不要在每一行的末尾输出多余的空格)。
示例1
输入
复制
1
5 10
1 A WA
1 A AC
2 A AC
3 C TLE
2 C TLE
1 C AC
3 A AC
4 A AC
1 A AC
5 A WA
输出
复制
Case #1:
2 1 1 1 0

我的结构体实现

#include <stdio.h>
#include <cstring>
#include <iostream>
using namespace std;
struct node {
  int sc;
  char t[200];
};
int main() {
  int t, cnt = 0;
  scanf("%d", &t);
  while (t--) {
    int n, m, num;
    scanf("%d %d", &n, &m);
    node p[n+5];
    memset(p, 0, sizeof(p));
    string status;
    char ti;
    for (int i = 0; i < m; i++) {
      cin >> num >> ti >> status;
      if (status[0] == 'A') {
        int j, c;
        if (p[num].sc == 0) {
          p[num].sc++;
          c = p[num].sc;
          p[num].t[c] = ti;
        } else {
          for (j = 1; j <= p[num].sc; j++) {
            if (ti == p[num].t[j]) break;
          }
          if (j > p[num].sc) {
            p[num].sc++;
            c = p[num].sc;
            p[num].t[c] = ti;
          }
        }
      }
    }
    printf("Case #%d:\n", ++cnt);
    printf("%d", p[1].sc);
    for (int i = 2; i <= n; i++) printf(" %d", p[i].sc);
    printf("\n");
  }
  return 0;
}

标程: 使用二维数组
由于通过一个题目只会给一个气球,所以我们可以开一个二维数组vis[i][j]来记录一下,
第 i 个队是否通过了第 j 个题目,vis[i][j] = 1表示已经通过,vis[i][j] = 0,则表示没
有。接着再用一个数组num统计一下每个队伍通过的题目数量即可。
由于是多组输入,不要忘记初始化。

猜你喜欢

转载自blog.csdn.net/sincerit/article/details/85227494