hdoj 5240 Exam 【模拟】

本文概述了AI音视频处理领域的关键技术,包括视频分割、语义识别、自动驾驶、AR、SLAM等,并探讨了其在实际应用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Exam

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 593    Accepted Submission(s): 298


Problem Description
As this term is going to end, DRD needs to prepare for his final exams.

DRD has n exams. They are all hard, but their difficulties are different. DRD will spend at least ri hours on the i-th course before its exam starts, or he will fail it. The i-th course's exam will take place ei hours later from now, and it will last for li hours. When DRD takes an exam, he must devote himself to this exam and cannot (p)review any courses. Note that DRD can review for discontinuous time.

So he wonder whether he can pass all of his courses.

No two exams will collide.
 

Input
First line: an positive integer T20 indicating the number of test cases.
There are T cases following. In each case, the first line contains an positive integer n105, and n lines follow. In each of these lines, there are 3 integers ri,ei,li, where 0ri,ei,li109.

 

Output
For each test case: output ''Case #x: ans'' (without quotes), where x is the number of test cases, and ans is ''YES'' (without quotes) if DRD can pass all the courses, and otherwise ''NO'' (without quotes).

 

Sample Input
2 3 3 2 2 5 100 2 7 1000 2 3 3 10 2 5 100 2 7 1000 2
 

Sample Output
Case #1: NO Case #2: YES
 
纯模拟,简单题目。

题意:给你N个科目以及每个科目需要复习的时间、每个科目开始考试的时间、每个科目考试所持续的时间,问你能不能通过所有科目的考试(在考试的时候不能做任何事情)。可以用复习完上一门科目的剩余时间来复习下一门科目。

思路:按考试时间排序,模拟复习 + 考试 即可。

#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 100000+10
using namespace std;
struct rec
{
    int r, e, l;
};
rec num[MAXN];
bool cmp(rec a, rec b)
{
    if(a.e != b.e)
        return a.e < b.e;
}
int N;
int main()
{
    int t;
    int k = 1;
    int yu, end, now;//复习完当前科目剩余时间  当前科目考试结束时间  已经成功复习到第几门科目
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &N);
        for(int i = 0; i < N; i++)
            scanf("%d%d%d", &num[i].r, &num[i].e, &num[i].l);
        sort(num, num+N, cmp);
        printf("Case #%d: ", k++);
        if(num[0].r > num[0].e)//第一个考试时间不够复习
        {
            printf("NO\n");
            continue;
        }
        end = num[0].e + num[0].l;//第一个考试结束时间
        yu = num[0].e - num[0].r;//复习完还剩的时间
        now = 1;
        while(yu)//可以用复习后剩余的时间来复习下一门考试
        {
            if(num[now].r >= yu)
            {
                num[now].r -= yu;
                yu = 0;//用完剩余时间
            }
            else//
            {
                yu -= num[now].r;
                num[now].r = 0;
                now++;//继续向下 复习下一门
            }
        }
        bool flag = true;
        for(int i = 1; i < N; i++)
        {
            if(end + num[i].r > num[i].e)//上一个结束时间加上准备时间超过 考试开始时间
            {
                flag = false;
                printf("NO\n");
                break;
            }
            else
            {
                yu = num[i].e - num[i].r - end;//剩余时间
                while(yu)//继续用剩余时间复习下一门
                {
                    if(num[now].r >= yu)
                    {
                        num[now].r -= yu;
                        yu = 0;
                    }
                    else//
                    {
                        yu -= num[now].r;
                        num[now].r = 0;
                        now++;//继续向下 复习
                    }
                }
                end = num[i].e + num[i].l;//记录结束时间
            }
        }
        if(flag)
            printf("YES\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值