#P11587. [KTSC 2022 R2] 编程测试

    ID: 12988 远端评测题 4000ms 1024MiB 尝试: 1 已通过: 1 显示难度NOI/NOI+/CTS 上传者: 标签>2022交互题KOI(韩国)

[KTSC 2022 R2] 编程测试

背景

请使用 C++17 或 C++20 提交本题

你需要在程序开头加入如下代码:

#include <vector>

std::vector<int> testset(std::vector<int> A, std::vector<int> B, std::vector<int> L, std::vector<int> U);

题目译自 2022년도 국제정보올림피아드 대표학생 선발고사 - 2차 선발고사 T1「 코딩 테스트 」

注:原题时间限制为 2.5s,但是洛谷评测机在大量内存读写下性能异常偏慢,因此放宽至 4s。

题目描述

公司最近因为编程测试的流行,开始出一些编程测试题目并出售给 IT 公司。

为了方便,公司将题目的难度分为 00 到 N−1N-1 个等级。目前,公司有 AiA_i 个难度为 ii 级的题目,还有 BiB_i 个难度不确定是 ii 级还是 i+1i+1 级的题目。除此之外,没有其他难度的题目。

公司正在寻找愿意购买题目的企业。目前有 MM 家企业表示有购买意向,编号从 00 到 M−1M-1。第 j(0≤j≤M−1)j (0 \leq j \leq M-1) 家企业只对难度在 LjL_j 级到 UjU_j 级之间的题目感兴趣。

公司计划将难度在 LjL_j 级到 UjU_j 级之间的题目按难度各选一个,组成一套题出售给第 jj 家企业,我们称之为一场比赛。如果只向第 jj 家企业出售题目,最多可以出售多少场比赛?对于难度不确定是 ii 级还是 i+1i+1 级的题目,需要适当分配难度,使得出售的比赛数量最多,并且每场比赛中的题目不能重复使用。

你需要实现以下函数:

vector<int> testset(vector<int> A, vector<int> B, vector<int> L, vector<int> U);

  • 该函数只会被调用一次。
  • A:长度为 NN 的整数数组。对于每个 i(0≤i≤N−1)i (0 \leq i \leq N-1),AiA_i 是难度为 ii 级的题目数量。
  • B:长度为 N−1N-1 的整数数组。对于每个 i(0≤i≤N−2)i (0 \leq i \leq N-2),BiB_i 是难度不确定是 ii 级还是 i+1i+1 级的题目数量。
  • L, U:长度为 MM 的整数数组。对于每个 j(0≤j≤M−1)j (0 \leq j \leq M-1),LjL_j, UjU_j 分别是第 jj 家企业感兴趣的题目的最小难度和最大难度。
  • 该函数返回一个长度为 MM 的整数数组 SS。对于每个 j(0≤j≤M−1)j (0 \leq j \leq M-1),SjS_j 是可以出售给第 jj 家企业的比赛的最大数量。

注意,提交的代码中不应包含任何输入输出操作。

输入格式

示例评测程序按以下格式读取输入:

  • 第 11 行:N MN\,M
  • 第 22 行:A[0] A[1] ⋯ A[N−1]A[0]\,A[1]\,\cdots\,A[N-1]
  • 第 33 行:B[0] B[1] ⋯ B[N−2]B[0]\,B[1]\,\cdots\,B[N-2]
  • 第 4+j(0≤j≤M−1)4+j (0 \leq j \leq M-1) 行:L[j] U[j]L[j]\,U[j]

输出格式

示例评测程序的输出格式如下:

  • 第 1+j(0≤j≤M−1)1+j (0 \leq j \leq M-1) 行:S[j]S[j]
4 2
2 3 1 1
1 3 2
0 3
1 2

3
5

提示

样例解释 #1

考虑 N=4,M=2,A=[2,3,1,1],B=[1,3,2],L=[0,1],U=[3,2]N=4, M=2, A=[2,3,1,1], B=[1,3,2], L=[0,1], U=[3,2] 的情况。

评测程序将调用如下函数:

testset({2,3,1,1},{1,3,2},{0,1},{3,2});

第 00 家企业需要难度在 00 级到 33 级之间的题目。可以通过以下方式组成 33 场比赛,剩下一个难度为 11 级的题目,无法再组成更多场比赛。

00 级 11 级 22 级 33 级
比赛 11 00 11 22 33
比赛 22 1−21-\mathbf{2} 2−32-\mathbf{3}
比赛 33 0−1\mathbf{0 - 1} 1−2\mathbf{1 - 2}

第 11 家企业需要难度在 11 级到 22 级之间的题目。可以通过以下方式组成 55 场比赛,使用了所有可能的题目,无法再组成更多的比赛。

11 级 22 级
比赛 11 11 22
比赛 22 1−21-\mathbf{2}
比赛 33 1−21 \mathbf{- 2}
比赛 44 0−10-\mathbf{1} 2−3\mathbf{2 - 3}
比赛 55 1−2\mathbf{1 - 2}

因此,调用的 testset 函数应返回 S=[3,5]S=[3,5]。

数据范围

对于所有输入数据,满足:

  • 2≤N≤1052 \leq N \leq 10^5
  • 1≤M≤1051 \leq M \leq 10^5
  • 对于所有 i(0≤i≤N−1)i (0 \leq i \leq N-1),0≤A[i]≤1080 \leq A[i] \leq 10^{8}
  • 对于所有 i(0≤i≤N−2)i (0 \leq i \leq N-2),0≤B[i]≤1080 \leq B[i] \leq 10^{8}
  • 对于所有 i(0≤j≤M−1)i (0 \leq j \leq M-1),0≤L[i]≤U[i]≤N−10 \leq L[i] \leq U[i] \leq N-1

详细子任务附加限制及分值如下表所示。

Subtask 分值 约束
11 33 $A[i] \leq 1000 (0 \leq i \leq N-1),B[i] \leq 1000 (0 \leq i \leq N-2),U[j]-L[j] \leq 2 (0 \leq j \leq M-1)$
22 1515 M≤100M \leq 100
33 3636 N≤5000N \leq 5000
44 2323 对于所有 j(0≤j≤M−1)j (0 \leq j \leq M-1),L[j]=0L[j]=0
55 无附加限制