1 条题解

  • 0
    @ 2025-4-7 14:07:46
    #include <iostream>
    #include <vector>
    #include<sstream>
    using namespace std;
    
    struct Time
    {
        int hour;
        int minute;
        Time(){}
        Time(int hour,int minute)
        {
            this->hour=hour;
            this->minute=minute;
        }
        string to_string()
        {
            stringstream ss;
            if(hour<10)
                ss<<"0";
            ss<<hour<<":";
            if(minute<10)
                ss<<"0";
            ss<<minute;
            return ss.str();
        }
    
        // 重写操作符
        bool operator>=(const Time& b)
        {
            if(this->hour>b.hour)
                return true;
            else if(this->hour==b.hour)
                if(this->minute>=b.minute)
                        return true;
            return false;
        }
    };
    
    struct appUse
    {
        string name;
        int priority;
        Time startTime;
        Time endTime;
        bool isInitialized=false;
        appUse(){}
        appUse(string name,int priority,Time startTime,Time endTime)
        {
            this->name=name;
            this->priority=priority;
            this->startTime=startTime;
            this->endTime=endTime;
            this->isInitialized=true;
        }
    };
    
    int strToInt(string input)
    {
        stringstream ss;
        int n;
        ss<<input;
        ss>>n;
        return n;
    }
    Time strToTime(string input)
    {
        stringstream ss;
        ss<<input;
        vector<string> out;
        string store;
        while(getline(ss,store,':'))
            out.push_back(store); 
        int hour=strToInt(out[0]),minute=strToInt(out[1]);
        return Time(hour,minute);
    }
    string judgeAvailableApp(vector<appUse> apps,Time inputTime)
    {
        int priority=0;
        string outAppName="NA";
        appUse outApp;
        for(auto app:apps)
        {
            // 判断因为有时间重合而覆盖掉的情况
            if(outApp.isInitialized)
            {
                // 有重合
                if(!(outApp.startTime>=app.endTime||app.startTime>=outApp.endTime))
                    // 有重合且outApp优先级小,则outApp被删除
                    if(outApp.priority<app.priority)
                    {
                        outAppName="NA";
                        outApp.isInitialized=false;
                    }
            }
            if(inputTime>=app.startTime&&app.endTime>=inputTime&&app.priority>priority)
            {
                priority=app.priority;
                outAppName=app.name;
                outApp=app;
            }
        }
        return outAppName;
    }
    int main(int argc, char *argv[])
    {
        vector<appUse> apps;
       int appAmount;
       cin>>appAmount;
       for(int i=0;i<appAmount;i++)
       {
            string appName,beginTime,endTime;
            int priority;
            cin>>appName>>priority>>beginTime>>endTime;
            appUse app(appName,priority,strToTime(beginTime),strToTime(endTime));
            apps.push_back(app);
       }
       string input;
       cin>>input;
       Time inputTime=strToTime(input);
       cout<<judgeAvailableApp(apps,inputTime);
    }
    
    
    • 1

    信息

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