前言
2025 年睿抗机器人开发者大赛 CAIP-编程技能赛本科组国赛复盘。本届比赛代码量依然可观,对细节把控要求较高,需要扎实的算法基础与编码能力。
题解
RC-u1 谁拿冠军了?
分值:15 分 考察点:哈希表统计
这道题的核心在于处理同一天内可能存在的多个相同操作。题目要求求和后再除 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 == 1){ sw1 += A1 * cnt; sw2 -= B1 * cnt / 2; }
else if(op == 2){ 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 << ;
;
}


