前言
本次竞赛题目代码量依然较大,对逻辑实现和细节把控要求较高。

题解
RC-u1 谁拿冠军了?
分值: 15 分
考察点: Hash 表的使用
注意点: 同一天内可能存在多个相同操作,需要求其总和后再进行计算。注意题目中除 2 的逻辑。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m; cin >> n >> m;
int A1, A2, B1, B2, B3; cin >> A1 >> A2 >> B1 >> B2 >> B3;
// 利用 array<int, 2> 表示二元组 (d,op)
map<array<int,2>,int> ops;
for(int i = 0; i < n; i++){
int d, op; cin >> d >> op;
ops[{d, op}] += 1;
}
// 题意保证 一天最多一个操作
map<int,int> ban;
for(int i = 0; i < m; i++){
int t, op; cin >> t >> op;
ban[t] = op;
}
int sw1 = 0, sw2 = 0;
for(auto [k, cnt]: ops){
auto [d, op] = k;
// 减半影响的操作
if(ban.count(d) && ban[d] == op){
if(op == ){ sw1 += A1 * cnt; sw2 -= B1 * cnt / ; }
(op == ){ sw2 -= B2 * cnt / ; }
(op == ){ sw1 -= A2 * cnt; sw2 -= B3 * cnt / ; }
} {
(op == ){ sw1 += A1 * cnt; sw2 -= B1 * cnt; }
(op == ){ sw2 -= B2 * cnt; }
(op == ){ sw1 -= A2 * cnt; sw2 -= B3 * cnt; }
}
}
cout << sw1 << << sw2 << ;
;
}



