You are on page 1of 10

2022 年淮安市青少年程序设计培训

提高组 第二试

比赛时间:2022 年 10 月 2 日 08:00-12:00

题目名称 蜜桃猫的公 哈拉鱼的游 一二的字符 三团的询问


司 戏 串
题目类型 传统型 传统型 传统型 传统型
目录 company game string query
可执行文件名 company game string query
输入文件名 company.in game.in string.in query.in
输出文件名 company.out game.out string.out query.out
每个测试点时限 4.0s 5.0s 10.0s 2.0s
内存限制 1024MB 1024MB 1024MB 1024MB
测试点数目 10 10 10 10
测试点是否等分 是 是 是 是

提交源程序文件名
对于 C++ 文件 company.cpp game.cpp string.cpp query.cpp

编译选项
对于 C++ 语言 -O2 -lm
2022 年淮安市青少年程序设计培训

A. 蜜桃猫的公司 (company)
时间限制: 4 seconds

空间限制: 1024 megabytes

【题目描述】

蜜桃猫开了一家公司, 它准备进行一场选拔。
有 m 个职位,有 n 个人去应聘,公司只会录用其中 m 个人担任这 m 个职
位。一个合理的用人方案为:一个职位只能由一个人承担且必须由一个人承
担,而一个人也最多只能担任一个职位。
可以用一个价值矩阵 A 衡量职位和员工的适配度,Aij 表示第 i 个职位和第 j
个员工的适配度是多少,保证同一个职位 i,Aij ̸= Aik ,蜜桃猫想选择一个合理
的用人方案,使得每个职位和对应安排的人的适配度之和最大。
可惜的是,通过面试,我们不能确定 A,只能知道对于每个职位而言这
n 个人的适配度相对大小关系。这里对于每个职位给出一个排列 Pi ,保证
∀1 ≤ x < y ≤ n, AiPix > AiPiy 。
现在蜜桃猫想知道,对于任意满足每个排列 Pi 的 A 矩阵,有可能被录用的
人有哪些。某个人在其中一个合理的用人方案中被录用,则称这个人有可能
被录用。

【输入格式】

第一行两个正整数 n, m。
下面 m 行,每行 n 个数,表示一个排列 Pi 。

【输出格式】

第一行一个数 k,表示有可能被录用的人的数量。
下面一行 k 个数用空格分开,
表示有可能被录用的人的编号,
编号按升序输出。

【样例输入输出】

样例输入 1 样例输出 1
4 2 3
1 2 4 3 1 2 3
1 3 4 2

A. 蜜桃猫的公司 (company) 1
2022 年淮安市青少年程序设计培训

样例输入 2 样例输出 2
4 2 2
1 4 3 2 1 2
2 3 4 1

样例 3 见文件 03-sample.in,03-sample.out。

【样例解释】

对于样例 1,有两种情况:
1 号职位安排 1 号人,2 号职位安排 3 号人。
1 号职位安排 2 号人,2 号职位安排 1 号人。
可以证明,对于所有满足 Pi 的 A,都属于这两种情况之一。
因此可能被录用的人编号为 1, 2, 3。

【数据范围与约定】

本题共 10 个测试点
测试点 1-2: 1 ≤ m ≤ n ≤ 5
测试点 3-5: 1 ≤ m ≤ n ≤ 10
测试点 6-7: 1 ≤ m ≤ 11, 1 ≤ n ≤ 1000, m ≤ n, 保证所有 Pi 相同
测试点 8-10:1 ≤ m ≤ 11, 1 ≤ n ≤ 1000, m ≤ n

A. 蜜桃猫的公司 (company) 2
2022 年淮安市青少年程序设计培训

B. 哈拉鱼的游戏 (game)
时间限制: 5 seconds

空间限制: 1024 megabytes

【题目描述】

哈拉鱼在玩一个打怪游戏。
游戏地图可以看作一个 n 个点 m 条边的无向图,有 k 个怪物。
怪物平时是隐身状态,但是在某些特定时刻,怪物会在某个点显形,这时
如果哈拉鱼刚好在这个点,则可以击败怪物。一个怪物被击败后不再出现。如
果多只怪物同时在某个点出现,哈拉鱼可以同时击败它们。
哈拉鱼有一个技能分身术,使得地图上有两只同时狩猎怪物的哈拉鱼,且
它们的动作是独立的,这两个分身在第 0 秒时分别位于 x, y 两个点。
走过一条长度为 w 的边需要消耗哈拉鱼 w 秒,每个时刻哈拉鱼都可以选择
沿着边移动或者原地不动。
哈拉鱼希望尽快击败所有怪物,击败所有怪物时通关。第 tmax 秒关卡结束,
如果超过这个时间则哈拉鱼闯关失败。

【输入格式】

本题采取多组数据输入输出。
第一行一个 T 表示数据组数。
对于每组数据,第一行三个数 n, m, k,表示图的点数,边数和猎物数量。
下面 m 行,每行三个数 u, v, w, 表示一条边连接 u, v 两个点,边长为 w。
下面一行两个数 e, tmax ,表示怪物显形的事件个数和关卡的最大时间。
下面 e 行,每行三个数 p, x, t 表示一个怪物出现事件: 编号为 p 的怪物,在
第 t 秒时,会在 x 号点出现。
下面两个数 x, y,表示哈拉鱼的两个分身初始位于 x 号点和 y 号店。

【输出格式】

如果无法过关,输出-1, 否则输出最短通关时间。

【样例输入输出】

B. 哈拉鱼的游戏 (game) 3
2022 年淮安市青少年程序设计培训

样例输入 1 样例输出 1
1 1
3 1 2
1 2 1
3 3
1 2 1
2 2 1
1 2 2
2 3

样例 2 见文件 02-sample.in 和 02-sample.ans。

【样例解释】

哈拉鱼的两个分身在 2,3。
两个分身不动,在 2 号点的分身等 1 秒,在第 1 秒时,1,2 两只怪都在 2
号点显形,哈拉鱼击败这两只怪物通关。

【数据范围与约定】

本题共 10 个测试点
测试点 1-3:1 ≤ n ≤ 100, 1 ≤ m ≤ 200, 1 ≤ k ≤ 8, 1 ≤ e ≤ 102 , 1 ≤ tmax ≤
108 , 1 ≤ wi ≤ 104
测试点 4-5:1 ≤ n ≤ 104 , 1 ≤ m ≤ 2 ∗ 104 , k = 1, 1 ≤ e ≤ 105 , 1 ≤ tmax ≤
108 , 1 ≤ wi ≤ 104
测试点 6-8:1 ≤ n ≤ 103 , 1 ≤ m ≤ 2 ∗ 103 , 1 ≤ k ≤ 6, 1 ≤ e ≤ 103 , 1 ≤ tmax ≤
500, 1 ≤ wi ≤ 10
测试点 9-10:1 ≤ n ≤ 104 , 1 ≤ m ≤ 2 ∗ 104 , 1 ≤ k ≤ 8, 1 ≤ e ≤ 105 , 1 ≤ tmax ≤
108 , 1 ≤ wi ≤ 104
对于所有数据,1 ≤ ti ≤ tmax , 1 ≤ pi ≤ k, 1 ≤ xi ≤ n。
对于测试点 1-5:T = 4
对于测试点 6-10:T = 1

B. 哈拉鱼的游戏 (game) 4
2022 年淮安市青少年程序设计培训

C. 一二的字符串 (string)
时间限制: 10 seconds

空间限制: 1024 megabytes

【题目描述】

一二最近在学习字符串。
求两个字符串的编辑距离是一个常见的问题:具体可以描述为对于两个串
S,T,允许对 S 做三种操作:在任意位置加入一个字符;删除任意一个字符;修
改某个位置的字符。使 S 变到 T 的最小操作次数称为这两个串的编辑距离。
现在一二准备简化这个问题:对于两个字符串,若编辑距离大于 k,输出
NO,否则输出 YES, 并输出这个最小操作次数。

【输入格式】

本题采取多组数据输入。
第一行一个 T,表示数据组数。
对于每组数据,第一行三个数 n, m, k,表示 S 串的长度,T 串的长度,和问
题给定的参数。
下面一行一个小写字母构成的字符串 S。
下面一行一个小写字母构成的字符串 T。

【输出格式】

如果编辑距离大于 k,输出一行 NO。


否则第一行输出 YES,第二行输出编辑距离 (最小的操作次数)。

【样例输入输出】

C. 一二的字符串 (string) 5
2022 年淮安市青少年程序设计培训

样例输入 1 样例输出 1
2 YES
3 4 3 2
kot NO
plot
5 7 3
zycie
porazka

样例 2 见文件 02-sample.in 和 02-sample.ans。

【样例解释】

对于第一个样例,可以把 k 变成 l,然后在 l 前面加上 p, 两次操作可以完


成。

【数据范围与约定】

本题共 10 个测试点
测试点 1-4: 1 ≤ n, m, k ≤ 103
测试点 5-7: 1 ≤ n, m ≤ 105 , 1 ≤ k ≤ 40
测试点 8-10: 1 ≤ n, m ≤ 106 , 1 ≤ k ≤ 1000
对于所有数据,1 ≤ T ≤ 5

C. 一二的字符串 (string) 6
2022 年淮安市青少年程序设计培训

D. 三团的询问 (query)
时间限制: 2 seconds

空间限制: 1024 megabytes

【题目描述】

三团想构造一个优美的序列。
序列的每个位置都有 Ki 个值待选,选 Vij 这个值需要付出 Cij 的代价。
选择完序列 A1 , A2 , . . . , An 后,三团会进行一些询问。
对于区间 [l, r], 三团会进行 Ql,r 次询问,每次询问产生 maxri=l Ai 的收益。
三团想知道,如何选择这个序列,收益减去代价最大,输出这个最大值。

【输入格式】

第一行一个 n, 表示序列长度。
下面 n 行,第 i 行输入 Qi,i 到 Qi,n 的值。
下面数据分为 n 块,每块的第一行一个 Ki ,表示第 i 个位置能选的数字个
数。
下面 Ki 行,每行两个数 Vi,j ,Ci,j ,表示值和代价。

【输出格式】

一行,一个数字,表示答案。

【样例输入输出】

D. 三团的询问 (query) 7
2022 年淮安市青少年程序设计培训

样例输入 1 样例输出 1
5 78
1 0 2 2 0
0 2 2 0
2 2 2
1 2
0
2
0 27
1 19
2
7 25
1 1
2
8 7
4 18
2
8 7
4 4
2
0 25
4 26

样例输入 2 样例输出 2
2 -145
1 1
1
2
1 100
2 50
1
1 100

D. 三团的询问 (query) 8
2022 年淮安市青少年程序设计培训

【数据范围与约定】

本题共 10 个测试点 ∑
测试点 1-2: 1 ≤ n ≤ 10, 1 ≤ ∑ Ki ≤ 30, 0 ≤ Vi,j ≤ 30
测试点 3-4: 1 ≤ n ≤ 40, 1 ≤ ∑Ki ≤ 200, 0 ≤ Vi,j ≤ 200
测试点 5-6: 1 ≤ n ≤ 100, 1 ≤ ∑Ki ≤ 200, 0 ≤ Vi,j ≤ 108
测试点 7-10: 1 ≤ n ≤ 300, 1 ≤ Ki ≤ 3 ∗ 105 , 0 ≤ Vi,j ≤ 108
对于所有数据,0 ≤ Ci,j ≤ 1013 , 0 ≤ Qi,j ≤ 999
注意:中间过程计算时可能需要用到 __int128

D. 三团的询问 (query) 9

You might also like