列表

详情


NC21717. 送气球.jpg

描述

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

输入描述

第一行包含一个整数T(),表示总共有T组测试样例;
第二行输入一个整数n,m;
n表示有多少个队伍参加这次的比赛();
m表示有多少条提交记录();
接下来输入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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 5ms, 内存消耗: 384K, 提交时间: 2018-12-25 13:03:16

#include<stdio.h>
#include<string.h>
int main()
{
	int k,i,j,m,n,t,l;
	scanf("%d",&k);
	for(l=1;l<=k;l++)
	{
		int w[100][50]={0};
		scanf("%d %d",&n,&m);
		for(i=0;i<m;i++)
		{
			int id;
			char s,ss[10];
			scanf("%d %c %s",&id,&s,&ss);
			if(strcmp(ss,"AC")==0)
			w[id][s-'A']=1;
		}
		printf("Case #%d:\n",l);
		for(i=1;i<=n;i++)
		{
			int sum=0;
			t=50;
			while(t--)
				sum+=w[i][50-t-1];
			printf("%d ",sum);
		}
		printf("\n");
	}
	
	return 0;
} 

Python3(3.5.2) 解法, 执行用时: 59ms, 内存消耗: 3684K, 提交时间: 2018-12-23 12:25:35

t=int(input())
for j in range(t):
    n,m=[int(x)for x in input().split()]
    l=[0 for i in range(n)]
    p=[[]for i in range(n)]
    for i in range(m):
        a,b,c=input().split()
        if c=='AC' and b not in p[int(a)-1]:
            p[int(a)-1].append(b)
            l[int(a)-1]+=1
    print("Case #%d:"%(j+1))
    for i in range(n):
        if i!=n-1:
            print(l[i],end=' ')
        else:
            print(l[i])

C++14(g++5.4) 解法, 执行用时: 9ms, 内存消耗: 620K, 提交时间: 2019-10-07 21:55:43

#include<bits/stdc++.h>
using namespace std;
map<string,int>ma[1000];
int main(){
	int T;cin >> T;
	int cas = 1;
	while(T--){
		for(int i = 1;i <= 1000;i++)
		ma[i].clear();
		printf("Case #%d:\n",cas++);
		int n,m;
		cin >> n >> m;
		for(int i = 1;i <= m;i++){
			int a;string b,c;
			cin >> a >> b >> c;
			if(c == "AC") ma[a][b] = 1;
		} 
		for(int i = 1;i <= n;i++){
			printf("%d%c",ma[i].size(),i == n ? '\n':' ');
		}
	}
}

C++11(clang++ 3.9) 解法, 执行用时: 7ms, 内存消耗: 504K, 提交时间: 2020-02-27 14:36:38

#include<iostream>
#include<string>
using namespace std;
int main()
{
	int t,n,m,q=1;
	cin>>t;
	while(t--)
	{
		int i,a[100][26]={0},b[100]={0};
		char c;
		cin>>n>>m;
		string s;
		while(m--)
		{
			cin>>i>>c>>s;
			if(s=="AC"&&a[i][c-'A']==0)
			{
				a[i][c-'A']=1;
				b[i]++;
			}
		}
		cout<<"Case #"<<q<<":"<<endl;
		q++;
		for(i=1;i<=n-1;i++)
		cout<<b[i]<<" ";
		cout<<b[i]<<endl;
	}
	return 0;
	
}

pypy3 解法, 执行用时: 110ms, 内存消耗: 25256K, 提交时间: 2021-07-17 17:08:18

for _ in range(int(input())):
    data = {}
    n,m=map(int,input().split(' '))
    for i in range(1,n+1):
        data[str(i)]=[]
    for i in range(m):
        t,tm,re=input().split(' ')
        if re == "AC" and tm not in data[t]:
            data[t].append(tm)
    print(f'Case #{_+1}:')
    for key in data:
        print(len(data[key]),end=' ')
    print()

上一题