1 条题解
-
0
方法思路
这道题目要求计算小欧对boss造成的总伤害。关键点如下:
- 每回合小欧先攻击boss,造成的伤害为a+kb(a是基础攻击力,b是基础连击伤害,k是连击次数)
- 攻击后连击次数+1
- 如果小欧闪避失败(字符'x'),则连击次数重置为0
- 如果小欧闪避成功(字符'o'),则连击次数不变
解题思路很直接:
- 初始化连击次数k为0,总伤害为0
- 遍历每个回合:
- 计算当前回合造成的伤害:a+kb
- 将伤害加入总伤害
- 连击次数+1
- 如果当前回合闪避失败('x'),则重置连击次数为0
时间复杂度为O(n),其中n是回合数。
代码实现
Java
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] line = scanner.nextLine().split(" "); int n = Integer.parseInt(line[0]); // 回合数 int a = Integer.parseInt(line[1]); // 基础攻击力 int b = Integer.parseInt(line[2]); // 基础连击伤害 String dodges = scanner.nextLine(); // 闪避情况 long totalDamage = 0; // 使用long防止溢出 int combo = 0; // 初始连击次数为0 for (int i = 0; i < n; i++) { // 计算当前回合的伤害 totalDamage += a + (long)combo * b; // 攻击后连击次数+1 combo++; // 如果闪避失败,重置连击次数为0 if (dodges.charAt(i) == 'x') { combo = 0; } } System.out.println(totalDamage); } }
Python
def calculate_damage(n, a, b, dodges): total_damage = 0 combo = 0 # 初始连击次数为0 for i in range(n): # 计算当前回合的伤害 total_damage += a + combo * b # 攻击后连击次数+1 combo += 1 # 如果闪避失败,重置连击次数为0 if dodges[i] == 'x': combo = 0 return total_damage # 读取输入 line = input().split() n = int(line[0]) # 回合数 a = int(line[1]) # 基础攻击力 b = int(line[2]) # 基础连击伤害 dodges = input() # 闪避情况 # 计算并输出结果 result = calculate_damage(n, a, b, dodges) print(result)
C++
#include <iostream> #include <string> using namespace std; int main() { int n, a, b; string dodges; cin >> n >> a >> b; cin >> dodges; long long totalDamage = 0; // 使用long long防止溢出 int combo = 0; // 初始连击次数为0 for (int i = 0; i < n; i++) { // 计算当前回合的伤害 totalDamage += a + (long long)combo * b; // 攻击后连击次数+1 combo++; // 如果闪避失败,重置连击次数为0 if (dodges[i] == 'x') { combo = 0; } } cout << totalDamage << endl; return 0; }
- 1
信息
- ID
- 78
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者