关注我,分享高质量每日一题题解~
b站同名账号分享力扣杯历届真题视频题解,也欢迎大家提出宝贵意见!
思路:模拟
- 如果 $a, b$ 的绝对值之差大于 $c$,那么对于 $a, b$ 中较大的那一个法力值对应的怪物,我们一定会先将其改造,再消耗较小的法力值进行消灭;否则我们不进行改造,直接消灭。
代码:(C++)
#include <bits/stdc++.h>
using namespace std;
int main() {
int T = 1;
cin >> T;
while(T--) {
int n, a, b, c;
cin >> n >> a >> b >> c;
string s;
cin >> s;
int ret = 0;
if(abs(a - b) > c) {
if(a < b) {
for(int i = 0; i < n; i++) {
if(s[i] == '0') ret += a;
else ret += a + c;
}
} else {
for(int i = 0; i < n; i++) {
if(s[i] == '1') ret += b;
else ret += b + c;
}
}
} else {
for(int i = 0; i < n; i++) {
if(s[i] == '0') ret += a;
else ret += b;
}
}
cout << ret << endl;
return 0;
}
}
复杂度分析:
- 时间复杂度为 $O(n)$