简单分数统计 - 题目 - Daimayuan Online Judge
发现样例输出的是id和成绩,那么就写一个包含这两个变量的结构体来储存它们
另外,再写一个结构体来储存题目名称和分数,目的是使两者联系起来,找到题目名称就能知道对应的分数
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1001;
struct Node {
string question;
int grade;
}q[N];
struct node {
string id;
int x;
}sid[N];
int main()
{
int n, m, k;
cin >> n >> m >> k;
for (int i = 0; i < n; i++) cin >> sid[i].id;
for (int i = 0; i < m; i++) cin >> q[i].question >> q[i].grade;
for (int i = 0; i < k; i++) {
string id;
cin >> id;
string question;
string ans;
cin >> question >> ans;
for (int j = 0; j < n; j++) {
if (sid[j].id == id&&ans=="AC") {//找到好朋友的id并且这条记录AC的话,就去找是哪一题
for (int p = 0; p < m; p++) {//找题目,从而知道该题分数,并加上该分数
if (question == q[p].question) {
sid[j].x += q[p].grade;
}
}
}
}
}
for (int i = 0; i < n; i++) {
cout << sid[i].id << " " << sid[i].x << endl;
}
return 0;
}
还可以用map将题目和分数联系起来
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
#define int long long
using namespace std;
const int N=1010;
struct node{
string id;
string question;
string result;
int score;
}q[N];
map<string,int>mp;
void solve()
{
int n,m,k;
cin>>n>>m>>k;
string id,question,result;
int score;
for(int i=1;i<=n;i++) cin>>q[i].id;
for(int i=1;i<=m;i++) {
cin>>question>>score;
mp[question]=score;
}
while(k--){
cin>>id>>question>>result;
for(int i=1;i<=n;i++){
if(q[i].id==id&&result=="AC"){
q[i].score+=mp[question];
}
}
}
for(int i=1;i<=n;i++){
cout<<q[i].id<<" "<<q[i].score;
cout<<endl;
}
}
signed main()
{
solve();
return 0;
}