1 条题解

  • 0
    @ 2025-4-10 21:24:21

    解题思路

    定义数据结构来存储摄入物质的信息,包括物质类型(巧克力或咖啡)、摄入时间、摄入数量。对于每个查询时间,遍历已记录的摄入信息,根据摄入时间和查询时间的关系,使用相应公式(巧克力:H(t)=8nt/12H(t) = 8*n - t/12;咖啡:H(t)=2ntt/79H(t) = 2*n - t*t/79)计算该物质对亢奋程度的贡献。将所有物质的贡献累加,若结果为负则取 0,最终结果与 1 比较,取较大值作为亢奋程度。

    代码

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <iomanip>
    #include <string>
    #include <cmath>
    #include <sstream>
    
    using namespace std;
    
    // 定义结构体存储摄入物质信息
    struct Substance {
        string type;
        int time;
        double quantity;
    };
    
    int main() {
        vector<Substance> substances;
        vector<int> queryTimes;
        string line;
    
        while (getline(cin, line)) {
            if (line.substr(0, 5) == "Query") {
                int queryTime;
                istringstream iss(line);
                string queryStr;
                iss >> queryStr >> queryTime;
                queryTimes.push_back(queryTime);
            } else {
                Substance substance;
                istringstream iss(line);
                iss >> substance.type >> substance.time >> substance.quantity;
                substances.push_back(substance);
            }
        }
    
        // 对查询时间排序
        sort(queryTimes.begin(), queryTimes.end());
    
        for (int queryTime : queryTimes) {
            double hyperactivityLevel = 0;
            for (const Substance& substance : substances) {
                double contribution = 0;
                int elapsedTime = queryTime - substance.time;
                if (elapsedTime >= 0) {
                    if (substance.type == "Chocolate") {
                        contribution = 8 * substance.quantity - elapsedTime / 12.0;
                    } else if (substance.type == "Coffee") {
                        contribution = 2 * substance.quantity - pow(elapsedTime, 2) / 79.0;
                    }
                    // 确保 contribution 不为负
                    contribution = max(contribution, 0.0);
                }
                hyperactivityLevel += contribution;
            }
            // 确保 hyperactivityLevel 不小于 1
            hyperactivityLevel = max(hyperactivityLevel, 1.0);
    
            cout << queryTime << " " << fixed << setprecision(1) << hyperactivityLevel << endl;
        }
    
        return 0;
    }    
    
    • 1

    信息

    ID
    1511
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    1
    上传者