QOJ.ac

QOJ

Time Limit: 4.0 s Memory Limit: 1024 MB Total points: 100

#17212. GPUs

統計

题目描述

作为一名现代企业家,你创办了一家生成式 AI 初创公司。图像、文本等内容的生成过程被拆分为 $N$ 个任务,每个任务在每个 GPU(图形处理器)上需要耗时一秒。你预先知道每个任务何时可用——任务 $i$ 在第 $T_i$ 秒可用。你拥有一个包含 $M$ 个 GPU 的外部超级计算机,但每个 GPU 每秒的使用成本不同——GPU $j$ 每秒的成本为 $C_j$。你需要为每个任务 $i$ 安排一个特定的 GPU $j$ 和一个特定的秒数,使得该秒数不早于 $T_i$,且同一时间同一 GPU 上不会安排其他任务。同样,一个 GPU 在给定的一秒内最多只能处理一个任务。

设最终完成时间(即最晚安排的时间加一)为 $F$,总支付金额为 $S$,即如果任务 $i$ 被安排在 GPU $G_i$ 上,则 $S = C_{G_1} + C_{G_2} + \dots + C_{G_N}$。

你需要找到 $F \times S$ 的最小值。你需要解决 $Q$ 个独立的、互不相关的任务实例。

输入格式

(注:本题为交互题,通过函数调用进行,具体见“交互”部分。)

数据范围

  • $1 \le N \le 10^7$
  • $1 \le M \le N$
  • $0 \le T_i \le N$
  • $1 \le C_j \le 2N$
  • $1 \le Q \le 5$

交互

本题为交互题。你不需要从标准输入读取或向标准输出写入,只需编写一个具有以下签名的 solveGpus 函数:

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

函数接收的两个值向量将按非递减顺序排序。函数可以修改输入向量。函数返回 __int128 类型,这代表一个 128 位整数。这是必要的,因为答案可能超过 long long 的限制。该函数可能会被多次调用。每次调用都是一个独立的任务实例。

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

#include "gpus.h"

你的代码将与一个读取输入并写入输出的评测器一起编译。在评测系统上,计入时间限制的唯一时间是你代码的执行时间,即输入和输出的时间不计入。

对于本地测试,我们提供了本地评测器 Lgrader.cppgpus.h 文件的副本。你需要将你的代码与本地评测器一起编译以进行测试。这可以通过将它们放在同一个文件夹中并使用以下命令完成:

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

子任务

子任务 分数 $N \le$ $Q \le$
1 10 10 1
2 8 800 2
3 13 2200 2
4 14 $10^4$ 2
5 11 $10^5$ 2
6 15 $10^6$ 5
7 29 $10^7$ 5

只有当一个子任务的所有测试用例都通过时,才能获得该子任务的分数。

样例

样例遵循本地评测器的输入格式($Q$,然后对于每个测试:$N, M$,所有 $C_j$,所有 $T_i$)。

输入 1

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

输出 1

39

说明 1

前 3 个任务在第 0 秒,接下来的 2 个任务在第 1 秒,最后 3 个任务在第 2 秒。 $S = 13$ $F = 3$

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#1310EditorialOpenOfficial EditorialAnonymous2026-03-20 13:07:31View

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.