1 条题解

  • 0
    @ 2025-7-15 17:52:37

    方法思路

    这道题目要求计算小欧对boss造成的总伤害。关键点如下:

    1. 每回合小欧先攻击boss,造成的伤害为a+kb(a是基础攻击力,b是基础连击伤害,k是连击次数)
    2. 攻击后连击次数+1
    3. 如果小欧闪避失败(字符'x'),则连击次数重置为0
    4. 如果小欧闪避成功(字符'o'),则连击次数不变

    解题思路很直接:

    1. 初始化连击次数k为0,总伤害为0
    2. 遍历每个回合:
      • 计算当前回合造成的伤害: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
    上传者