1 条题解

  • 0
    @ 2025-10-19 14:12:49
    #include <iostream>
    #include <cmath>
    
    char process_c(char c, int *e_count)
    {
        switch (c)
        {
        case 'J':
            // 可以是J,D
            *e_count += 1;
            return 'J';
    
        case 'B':
            // 必须是 D
            return 'D';
    
        case 'D':
        default:
            // 可以是J,D
            *e_count += 1;
            return 'J';
        }
    }
    
    /*
    long long quick_power(int base, long long exp){
        long long result = 1;
        while (exp > 0)
        {
            if (exp % 2 == 1)
            {
                result *= base;
            }
            base *= base;
            exp /= 2;
            
        }
        
    }
    */
    
    long long int_power(int base, long long exp){
        long long result = 1;
        for (int i = 0; i < exp; i++)
        {
            result *= base;
        }
        return result;
    }
    
    long long case_result()
    {
        int char_count;
        std::cin >> char_count;
    
        std::string s;
        std::string s_opposite;
        int e_count = 0;
        long long solution_count = 0;
        std::cin >> s;
    
        if (s.back() != 'J')
        {
            return 0;
        }
        s.pop_back();
    
        // 先计算积攒最多能量的方法
        for (char c : s)
        {
            s_opposite += process_c(c, &e_count);
        }
        // std::cout << s_opposite << ' ';
    
        if (e_count < 1)
        {
            return 0;
        }
        else
        {
            solution_count = int_power(2, e_count) - 1;
        }
    
        return solution_count;
    }
    
    int main()
    {
        int cases_count;
        std::cin >> cases_count;
    
        for (int i = 0; i < cases_count; i++)
        {
    
            std::cout << case_result() << std::endl;
        }
    
        return 0;
    }
    

    信息

    ID
    44
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    108
    已通过
    11
    上传者