logo AlgoBeat OnlineJudge
登录 注册

#215908. [Bulgarian NOI 2024] 显卡 / GPUs

内存限制:1024 MiB 时间限制:5000 ms 标准输入输出
题目类型:VJudge(洛谷) 评测方式:VJudge
上传者: 匿名

题目描述

在洛谷上提交此题,请选择 >=C++17 的语言标准,不需要引入 #include "gpus.h",而是将

#include <algorithm>
#include <iostream>
#include <vector>

inline std::ostream& operator<<(std::ostream& out, __int128 num)
{
    bool flip = false;

    if (num < 0)
    {
        flip = true;
        num = -num;
    }

    std::string str = "";

    do
    {
        str += '0' + num % 10;
        num /= 10;
    }
    while (num > 0);

    std::reverse(str.begin(), str.end());

    if (flip) str = "-" + str;

    out << str;

    return out;
}

__int128 solveGpus(std::vector<int>& gpuCosts, std::vector<int>& reqTimes);

显式地放在代码开头。


作为一家现代创业公司的创始人,你们启动了一个生成式 AI 项目。图像、文本等的生成过程被拆分为 个任务,每个任务需要恰好一台 GPU(显卡)运行一秒钟。你预先知道每个任务何时可用——任务 在第 秒变为可执行状态。你可以使用一台拥有 块 GPU 的外部超级计算机,但每块 GPU 的使用成本不同:第 块 GPU 每秒花费 。你需要为每个任务 分配一块特定的 GPU 和一个具体的时间点,使得该时间点不早于 ,且在同一时刻、同一块 GPU 上没有其他任务被调度。换言之,每块 GPU 在任意给定秒内最多只能处理一个任务。

设最终完成时间为 (即所有任务中最晚的调度时间加一),总支付金额为 。若任务 被分配给 GPU ,则 。你的目标是找到 的最小可能值。你需要独立解决 个该问题的实例。

交互说明

本题为交互式题目。你无需从标准输入读取数据或向标准输出写入数据,只需实现一个名为 solveGpus 的函数,其定义如下:

__int128 solveGpus(
    std::vector<int>& gpuCosts,
    std::vector<int>& reqTimes
);

该函数接收两个 vector 作为参数,这两个 vector 均按非递减顺序排序。你可以修改传入的 vector。函数返回类型为 __int128,表示一个 128 位整数——这是必要的,因为答案可能超出 long long 的范围。该函数会被多次调用,每次调用对应一道独立的题目实例。

你的代码中不应包含 main 函数,但可以包含任意其他辅助函数、类、变量等。你的代码必须包含头文件 gpus.h,其中为了方便你使用,已定义了用于输出 __int128 类型值的运算符。请通过以下预处理指令包含该头文件:

#include "gpus.h"

你的代码将与评测器一起编译,评测器负责读取输入并写入输出。在评测系统中,唯一计入时间限制的是你的代码实际执行所花费的时间,即输入/输出操作的时间不计入总耗时。

为便于本地测试,我们提供了本地评测器 Lgrader.cpp 以及头文件 gpus.h 的副本。你需要将自己的代码与本地评测器一同编译,以便进行测试。你可以将它们放在同一目录下,并使用以下命令:

g++ -O2 -std=c++17 -Wl,--stack,1073741824 -Wall gpus.cpp Lgrader.cpp -o gpus.exe

输入格式

本地评测器的输入格式如下:

首先为 ,随后对于每个测试用例:,接着是所有 和所有

样例

样例输入 1

1
8 4
1 2 2 6
0 0 0 0 1 2 2 2

样例输出 1

39

数据范围与提示

子任务

子任务 分数

只有当成功通过某子任务所对应的所有测试点时,才能获得该子任务的分数。

限制条件

翻译由 Qwen3.5-397B-A17B 完成