104 | 简单分数统计 |
N 个好朋友在codeforces上参加一场包含 M 个题目的比赛, 比赛期间codeforces网站一共有 k 次提交。
已知每个题目的分数,
但是由于他们只能查到在比赛期间codeforces总共的提交记录(其他用户提交的其他题目记录也包含在内, 即存在不属于该场比赛的题目),
所以想请你编写一个程序算出他们每个人的分数。
输入格式
第一行三个整数 N, M, K 分别表示好朋友的个数, 题目的个数, 和提交的总次数(其中0<N,M,K<=2000)。
接下来 N 行 第 i 行输入为第 i 个人的id,
接下来 M 行 第 j 行输入为第 j 个题目的名称和分数,
接下来 K 行 第 k 行输入为第 k 次提交的提交者id, 题目名称和结果("WA" 或 "AC", 如果"AC"代表通过这个题目, 提交者获得对应分数)。
注: 题目名称和id均为仅包含英文字母和数字的字符串, 题目分数为小于等于 1e6 的正整数. 每一行的多个输入之间用空格隔开。
所有输入的字符串长度 length 满足 0<length≤5000。
所有用户id和题目名称不存在重名, 用户AC了某个题之后之后不会再重复提交该题, 好朋友们只会提交属于比赛的题目。
输出格式
输出 N 行, 第 i 行输出第 i 个人的名字和对应分数 (名字和分数用空格隔开)。
样例输入
2 2 4 GabrielPessoa beza metebronca 100 geometry 200 beza metebronca AC ffern numbertheory AC GabrielPessoa geometry WA beza geometry AC
样例输出
GabrielPessoa 0 beza 300
样例解释
beza 过了 metebronca和geometry 拿到 300 分。
GabrielPessos 没有过题, 所以是 0 分。
还有一些其他选手提交的其他题目忽略不计。
AC代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include <iomanip>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
#define fo(x) for(int i = 1;i<=x;++i)
#define ios ios::sync_with_stdio(false);cin.tie(0), cout.tie(0)
const int N = 1e5+9;
struct peo
{
string name;
int sum = 0;
bool flag[209];
}q[209];
struct t
{
string nm;
int toadd;
}f[209];
int main()
{
int n,m,k;
cin>>n>>m>>k;
for(int i = 1;i<=n;i++)
{
cin>>q[i].name;
}
for(int i = 1;i<=m;i++)
{
cin>>f[i].nm>>f[i].toadd;
}
while(k--)
{
string a,b,c;
cin>>a>>b>>c;
bool ok = 0;
if(c=="AC")
for(int i = 1;i<=n;i++)
{
if(ok)
break;
if(q[i].name==a)
{
for(int j = 1;j<=m;j++)
{
if(f[j].nm==b)
{
if(!q[i].flag[j])
{
q[i].flag[j] = 1;
q[i].sum+=f[j].toadd;
ok = 1;
break;
}
}
}
}
}
}
for(int i = 1;i<=n;i++)
cout<<q[i].name<<' '<<q[i].sum<<"\n";
}