1、CCF CSP 认证第 1-10 次真题 (含模拟试题 1 套) 试题编号 试题名称 试题编号 试题名称 201312-1 出现次数最多的数(模拟) 201503-1 图像旋转(第 4次) 201312-2 ISBN号码(模拟) 201503-2 数字排序(第 4次) 201312-3 最大的矩形(模拟) 201503-3 节日(第 4次) 201312-4 有趣的数(模拟) 201503-4 网络延时(第 4次) 201312-5 I m stuck!(模拟) 201503-5 最小花费(第 4次) 201403-1 相反数(第 1次) 201509-1 数列分段(第 5次) 201403-
2、2 窗口(第 1次) 201509-2 日期计算(第 5次) 201403-3 命令行选项(第 1次) 201509-3 模板生成系统(第 5次) 201403-4 无线网络(第 1次) 201509-4 高速公路(第 5次) 201403-5 任务调度(第 1次) 201509-5 最佳文章(第 5次) 201409-1 相邻数对(第 2次) 201512-1 数位之和(第 6次) 201409-2 画图(第 2次) 201512-2 消除 类游戏(第 6 次) 201409-3 字符串匹配(第 2次) 201512-3 画图(第 6次) 201409-4 最优配餐(第 2次) 201512
3、-4 送货(第 6次) 201409-5 拼图(第 2次) 201512-5 矩阵(第 6次) 201412-1 门禁系统(第 3次) 201604-1 折点计数 (第 7次 ) 201412-2 Z字形扫描(第 3次) 201604-2 俄罗斯方块 (第 7 次 ) 201412-3 集合竞价(第 3次) 201604-3 路径解析 (第 7次 ) 201412-4 最优灌溉(第 3次 ) 201604-4 游戏 (第 7次 ) 201412-5 货物调度(第 3次) 201604-5 网络连接 (第 7次 ) 201609-1 最大波动 (第八次 ) 201612-1 中间数 (第九次)
4、201609-2 火车购票 (第八次 ) 201612-2 工资计算 (第九次) 201609-3 炉石传说 (第八次 ) 201612-3 权限查询 (第九次) 201609-4 交通规划 (第八次 ) 201612-4 压缩编码 (第九次) 201609-5 祭坛 (第八次 ) 201612-5 卡牌游戏 (第九次) 201703-1 分蛋糕 (第十次) 201703-2 学生排队 (第十次) 201703-3 Markdown(第十次) 201703-4 地铁修建 (第十次) 201703-5 引水入城 (第十次) 试题编号: 201312-1 试题名称: 出现次数最多的数 时间限制:
5、1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定 n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。 输入格式 输入的第一行只有一个正整数 n(1 n 1000),表示数字的个数。 输入的第二行有 n个整数 s1, s2, , sn (1 si 10000, 1 i n)。相邻的数用空格分隔。 输出格式 输出这 n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。 样例输入 6 10 1 10 20 30 20 样例输出 10 试题编号: 201312-2 试题名称: ISBN号码 时间限制: 1.0s 内存限制: 256.0MB
6、 问题描述: 问题描述 每一本正式出版的图书都有一个 ISBN号码与之对应, ISBN码包括 9位数字、 1位识别码和 3位分隔符,其规定格式如“ x-xxx-xxxxx-x”,其中符号“ -”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的 ISBN 码。 ISBN码的首位数字表示书籍的出版语言,例如 0代表英语;第一个分隔符“ -”之后的三位数字代表出版社,例如 670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。 识别码的计算方法如下: 首位数字乘以 1加上次位数字乘以 2以此类推,用所得的结果mod 11,所得
7、的余 数即为识别码,如果余数为 10,则识别码为大写字母X。例如 ISBN号码 0-670-82162-4 中的识别码 4是这样得到的:对067082162这 9个数字,从左至右,分别乘以 1, 2, 9,再求和,即0 1+6 2+ +2 9=158,然后取 158 mod 11的结果 4作为识别码。 编写程序判断输入的 ISBN号码中识别码是否正确,如果正确,则仅输出“ Right”;如果错误,则输出是正确的 ISBN号码。 输入格式 输入只有一行,是一个字符序列,表示一本书的 ISBN号码(保证输入符合 ISBN号码的格式要求 )。 输出格式 输出一行,假如输入的 ISBN号码的识别码正确
8、,那么输出“ Right”,否则,按照规定的格式,输出正确的 ISBN号码(包括分隔符“ -”)。 样例输入 0-670-82162-4 样例输出 Right 样例输入 0-670-82162-0 样例输出 0-670-82162-4 试题编号: 201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了 n个相邻的矩形,每个矩形的宽度是 1,而第 i( 1 i n)个矩形的高度是 hi。这 n 个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是 3, 1, 6, 5, 2, 3。 请找出能放在给定直方图里面积最大的矩
9、形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是 10。 输入格式 第一行包含一个整数 n,即矩形的数量 (1 n 1000)。 第二行包含 n 个整数 h1, h2, , hn,相邻的数之间由空格分隔。(1 hi 10000)。 hi是第 i个矩形的高度。 输出格式 输出一行,包含一个整数,即给定直方图内的最大矩形的面积。 样例输入 6 3 1 6 5 2 3 样例输出 10 试题编号: 201312-4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含 0
10、, 1, 2, 3,且这四个数字都出现过至少一次。 2. 所有的 0都出现在所有的 1 之前,而所有的 2都出现在所有的 3之前。 3. 最高位数字不为 0。 因此,符合我们定义的最小的有趣的数是 2013。除此以外, 4位的有趣的数还有两个: 2031和 2301。 请计算恰好有 n位的有趣的数的个数。由于答案可能非常大,只需要输出答案除以 1000000007的余数。 输入格式 输入只有一行,包括恰好一个正整数 n (4 n 1000)。 输出格式 输出只有一行,包括恰好 n 位的整数中有趣的数的个数除以1000000007 的余数。 样例输入 4 样例输出 3 试题编号: 201312-
11、5 试题名称: I m stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个 R行 C列的地图,地图的每一个方格可能是 #, +, -, |, ., S, T七个字符中的一个,分别表示如 下意思: #: 任何时候玩家都不能移动到此方格; +: 当玩家到达这一方格后,下一步可以向上下左右四个方向相邻的任意一个非 #方格移动一格; -: 当玩家到达这一方格后,下一步可以向左右两个方向相邻的一个非 #方格移动一格; |: 当玩家到达这一方格后,下一步可以向上下两个方向相邻的一个非 #方格移动一格; .: 当玩家到达这一方格后,下一步只能向下移动一格。如果下面
12、相邻的方格为 #,则玩家不能再移动; S: 玩家的初始位置,地图中只会有一个初始位置。 玩家到达这一方格后,下一步可以向上下左右四个方向相邻的任意一个非 #方格移动一格; T: 玩家的目标位置,地图中只会有一个目标位置。玩家到达这一方格后,可以选择完成任务,也可以选择不完成任务继续移动。如果继续移动下一步可以向上下左右四个方向相邻的任意一个非 #方格移动一格。 此外,玩家不能移动出地图。 请找出满足下面两个性质的方格个数: 1. 玩家可以从初始位置移动到此方格; 2. 玩家不可以从此方格移动到目标位置。 输入格式 输入的第一行包括两个整数 R 和 C,分别表示地图的 行和列数。 (1 R, C
13、 50)。 接下来的 R行每行都包含 C个字符。它们表示地图的格子。地图上恰好有一个 S和一个 T。 输出格式 如果玩家在初始位置就已经不能到达终点了,就输出“ Im stuck!”(不含双引号)。否则的话,输出满足性质的方格的个数。 样例输入 5 5 -+-+ |#. |# S-+-T #. 样例输出 2 样例说明 如果把满足性质的方格在地图上用 X标记出来的话,地图如下所示: -+-+ |#X |# S-+-T #X 试题编号: 201403-1 试题名称: 相反数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有 N 个非零且各不相同的整数。请你编一个程序求出它
14、们中有多少对相反数 (a 和 -a 为一对相反数 )。 输入格式 第一行包含一个正整数 N。 (1 N 500)。 第二行为 N 个用单个空格隔开的非零整数 ,每个数的绝对值不超过1000,保证这些整数各不相同。 输出格式 只输出一个整数 ,即这 N 个数中包含多少对相反数。 样例输入 5 1 2 3 -1 -2 样例输出 2 试题编号: 201403-2 试题名称: 窗口 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在某图形操作系统中 ,有 N 个窗口 ,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之间有层次的区别 ,在多于一
15、个窗口重叠的区域里 ,只会显示位于顶层的窗口里的内容。 当你点击屏幕上一个点的时候 ,你就选择了处于被点击位置的最顶层窗口 ,并且这个窗口就会被移到所有窗口的最顶层 ,而剩余的窗口的层次顺序不变。如果 你点击的位置不属于任何窗口 ,则系统会忽略你这次点击。 现在我们希望你写一个程序模拟点击窗口的过程。 输入格式 输入的第一行有两个正整数 ,即 N 和 M。 (1 N 10,1 M 10) 接下来 N 行按照从最下层到最顶层的顺序给出 N 个窗口的位置。 每行包含四个非负整数 x1, y1, x2, y2,表示该窗口的一对顶点坐标分别为 (x1, y1) 和 (x2, y2)。保证 x1 x2,
16、y1 2。 接下来 M 行每行包含两个非负整数 x, y,表示一次鼠标点击的坐标。 题目中涉及到的所有点和矩形的顶点的 x, y 坐标分别不超过 2559 和 1439。 输出格式 输出包括 M 行 ,每一行表示一次鼠标点击的结果。如果该次鼠标点击选择了一个窗口 ,则输出这个窗口的编号 (窗口按照输入中的顺序从 1 编号到 N);如果没有 ,则输出 “IGNORED“(不含双引号 )。 样例输入 3 4 0 0 4 4 1 1 5 5 2 2 6 6 1 1 0 0 4 4 0 5 样例输出 2 1 1 IGNORED 样例说明 第一次点击的位置同时属于第 1 和第 2 个窗口 ,但是由于 第
17、 2 个窗口在上面 ,它被选择并且被置于顶层。 第二次点击的位置只属于第 1 个窗口 ,因此该次点击选择了此窗口并将其置于顶层。现在的三个窗口的层次关系与初始状态恰好相反了。 第三次点击的位置同时属于三个窗口的范围 ,但是由于现在第 1 个窗口处于顶层 ,它被选择。 最后点击的 (0, 5) 不属于任何窗口。 试题编号: 201403-3 试题名称: 命令行选项 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请你写一个命令行分析程序 ,用以分析给定的命令行里包含 哪些选项。每个命令行由若干个字符串组成 ,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的
18、名字 ,由小写字母组成 ,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项 ,然后可能会包含一 些不是选项的参数。 选项有两类 :带参数的选项和不带参数的选项。一个合法的无参数选项的形式是一个减号后面跟单个小写字母 ,如 “-a“ 或 “-b“。而带参数选项则由两个由空格分隔的字符串构成 ,前者的格式要求与无参数选项相同 ,后者则是该选项的参数 ,是由小写字母 ,数字和减号组成的非空字符串。 该命令行工具的作 者提供给你一个格式字符串以指定他的命令行工具需要接受哪些选项。这个字符串由若干小写字母和冒号组成 ,其中的每个小写字母表示一个该程序接受的选项。如果该小写字母后面紧跟了一个冒号
19、 ,它就表示一个带参数的选项 ,否则则为不带参数的选项。例如 , “ab:m:“ 表示该程序接受三种选项 ,即 “-a“(不带参数 ),“-b“(带参数 ), 以及 “-m“(带参数 )。 命令行工具的作者准备了若干条命令行用以测试你的程序。对于每个命令行 ,你的工具应当一直向后分析。当你的工具遇到某个字符串既不是合法的选项 ,又不是某个合法选项的参数时 ,分析就停止。命令行剩余的未分析部分不构成该命令的选项 ,因此你的程序应当忽略它们。 输入格式 输入的第一行是一个格式字符串 ,它至少包含一个字符 ,且长度不超过 52。格式字符串只包含小写字母和冒号 ,保证每个小写字母至多出现一次 ,不会有
20、两个相邻的冒号 ,也不会以冒号开头。 输入的第二行是一个正整数 N(1 N 20),表示你需要处理的命令行的个数。 接下来有 N 行 ,每行是一个待处理的命令行 ,它包括不超过 256 个字符。该命令行一定是若干个由单个空格分隔的字符串构成 ,每个字符串里只包含小写字 母 ,数字和减号。 输出格式 输出有 N 行。其中第 i 行以 “Case i:“ 开始 ,然后应当有恰好一个空格 ,然后应当按照字母升序输出该命令行中用到的所有选项的名称 ,对于带参数的选项 ,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次 ,只输出一次。如果一个带参数的选项在命令行中出 现了多次 ,只输
21、出最后一次出现时所带的参数。 样例输入 albw:x 4 ls -a -l -a documents -b ls ls -w 10 -x -w 15 ls -a -b -c -d -e -l 样 例输出 Case 1: -a -l Case 2: Case 3: -w 15 -x Case 4: -a -b 试题编号: 201403-4 试题名称: 无线网络 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 目前在一个很大的平面房间里有 n 个无线路由器 ,每个无线路由器都固定在某个点上。任何两个无线路由器只要距离不超过 r 就能互相建立网络连接。 除此以外 ,另有 m
22、个可以摆放无线路由器的位置。你可以在这些位置中选择至多 k 个增设新的路由器。 你的目 标是使得第 1 个路由器和第 2 个路由器之间的网络连接经过尽量少的中转路由器。请问在最优方案下中转路由器的最少个数是多少 ? 输入格式 第一行包含四个正整数 n,m,k,r。 (2 n 100,1 k m 100, 1 r 108)。 接下来 n 行 ,每行包含两个整数 xi 和 yi,表示一个已经放置好的无线 路由器在 (xi, yi) 点处。输入数据保证第 1 和第 2 个路由器在仅有这 n 个路由器的情况下已经可以互相连接 (经过一系列的中转路由器 )。 接下来 m 行 ,每行包含两个整数 xi 和
23、 yi,表示 (xi, yi) 点处可以增设 一个路由器。 输入中所有的坐标的绝对值不超过 108,保证输入中的坐标各不相同。 输出格式 输出只有一个数 ,即在指定的位置中增设 k 个路由器后 ,从第 1 个路 由器到第 2 个路由器最少经过的中转路由器的个数。 样例输入 5 3 1 3 0 0 5 5 0 3 0 5 3 5 3 3 4 4 3 0 样例输出 2 试题编号: 201403-5 试题名称: 任务调度 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有若干个任务需要在一台机器上运行。它们之间没有依赖关系 ,因此 可以被按照任意顺序执行。 该机器有两个 CP
24、U 和一个 GPU。对于每个任务 ,你可以为它分配不 同的硬件资源 : 1. 在单个 CPU 上运行。 2. 在两个 CPU 上同时运行。 3. 在单个 CPU 和 GPU 上同时运行。 4. 在两个 CPU 和 GPU 上同时运行。 一个任务开始执行以后 ,将会独占它所用到的所有硬件资源 ,不得中 断 ,直到执行结束为止。第 i 个任务用单个 CPU,两个 CPU,单个 CPU 加 GPU,两个 CPU 加 GPU 运行所消耗的时间分别为 ai,bi,ci 和 di。 现在需要你计算出至少需要花多少时间可以把所有给定的任务完成。 输入格式 输入的第一行只有一个正整数 n(1 n 40), 是
25、总共需要执行的任 务个数。 接下来的 n 行每行有四个正整数 ai, bi, ci, di(ai, bi, ci, di 均不超过 10), 以空格隔开。 输出格式 输出只有一个整数 ,即完成给定的所有任务所需的最少时间。 样例输入 3 4 4 2 2 7 4 7 4 3 3 3 3 样例输出 7 样例说明 有很多种调度方案可以在 7 个时间单位里完成给定的三个任务 ,以下是其中的一种方案 : 同时运行第一个任务 (单 CPU 加上 GPU)和第三个任务 (单 CPU), 它们分别在时刻 2 和时刻 3 完成。在时刻 3 开始双 CPU 运行任务 2,在 时刻 7 完成。 试题编号: 2014
26、09-1 试题名称: 相邻数对 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定 n个不同的整数,问这些数中有多少对整数, 它们的值正好相差1。 输入格式 输入的第一行包含一个整数 n,表示给定整数的个数。 第二行包含所给定的 n个整数。 输出格式 输出一个整数,表示值正好相差 1的数对的个数。 样例输入 6 10 2 6 3 7 8 样例输出 3 样例说明 值正好相差 1的数对包括 (2, 3), (6, 7), (7, 8)。 评测用例规模与约定 1=n=1000,给定的整数为不超过 10000的非负整数。 试题编号: 201409-2 试题名称: 画图 时间限
27、制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一个定义了直角坐标系的纸上,画一个 (x1,y1)到 (x2,y2)的矩形指将横坐标范围从 x1到 x2,纵坐标范围从 y1到 y2之间的区域涂上颜色。 下图给出了一个画了两个矩形的例子。第一个矩形是 (1,1) 到 (4, 4),用绿色和紫色表示。第二个矩形是 (2, 3)到 (6, 5),用蓝色和紫色表示。图中,一共有 15 个单位的面积被涂上颜色,其中紫色部分被涂了两次,但在计算面积时只计算一次。在实际的涂色过程中,所有的矩形都涂成统一的颜色,图中显示不同颜色仅为说明方便。 给出所有要画的矩形,请问总共有多少个单位的面积
28、被涂上颜色。 输入格式 输入的第一行包含一个整数 n,表示要画的矩形的个数。 接下来 n行,每行 4个非负整数,分别表示要画的矩形的左下角的横坐标与纵坐标,以及右上角的横坐标与纵坐标。 输出格式 输出一个整数,表示有多少个单位的面积被涂上颜色。 样例输入 2 1 1 4 4 2 3 6 5 样例输出 15 评测用例规模与约定 1=n=100, 0=横坐标、纵坐标 =100。 试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当
29、选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。 输入格式 输入的第一行包含一个字符串 S,由大小写英文 字母组成。 第二行包含一个数字,表示大小写敏感的选项,当数字为 0时表示大小写不敏感,当数字为 1时表示大小写敏感。 第三行包含一个整数 n,表示给出的文字的行数。 接下来 n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。 输出格式 输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串 S的行。 样例输入 Hello 1 5 HelloWorld HiHiHelloHiHi GrepIsA
30、GreatTool HELLO HELLOisNOTHello 样例输出 HelloWorld HiHiHelloHiHi HELLOisNOTHello 样例说明 在上面的样例中,第四个字符串虽然也是 Hello,但是大小写不正确。如果将输入的第二行改为 0,则第四个字符串应该输出。 评测用例规模与约定 1=n=100,每个字符串的长度不超过 100。 试题编号: 201409-4 试题名称: 最优配餐 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务。随着连锁店越来越多,怎么合理的给客户送 餐成为了一个急需解决的问题。 栋栋的
31、连锁店所在的区域可以看成是一个 n n的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。 方格图中的线表示可以行走的道路,相邻两个格点的距离为 1。栋栋要送餐必须走可以行走的道路,而且不能经过红色标注的点。 送餐的主要成本体现在路上所花的时间,每一份餐每走一个单位的距离需要花费 1块钱。每个客户的需求都可以由栋栋的任意分店配送,每个分店没有配送总量的限制。 现在你得到了栋栋的客户的需求,请问在最优的送餐方式下,送这些餐需要花费多大的成本。 输入格式 输入的第一行包含四个整数 n, m, k, d,分别表示方格图的
32、大小、栋栋的分店数量、客户的数量,以及不能经过的点的数量。 接下来 m行,每行两个整数 xi, yi,表示栋栋的一个分店在方格图中的横坐标和纵坐标。 接下来 k行,每行三个整数 xi, yi, ci,分别表示每个客户在方格图中的横坐标、纵坐标和订餐的量。(注意,可能有多个客户在方格图中的同一个位置) 接下来 d行,每行两个整数,分别表示每个不能经过的点的横坐标和纵坐标。 输出格式 输出一个整数,表示最优送餐方式下所需要花费的成本。 样例输入 10 2 3 3 1 1 8 8 1 5 1 2 3 3 6 7 2 1 2 2 2 6 8 样例输出 29 评测用例规模与约定 前 30%的评测用例满足
33、: 1=n =20。 前 60%的评测用例满足: 1=n=100。 所有评测用例 都满足: 1=n=1000, 1=m, k, d=n2。可能有多个客户在同一个格点上。每个客户的订餐量不超过 1000,每个客户所需要的餐都能被送到。 试题编号: 201409-5 试题名称: 拼图 时间限制: 3.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个 n m的方格图,现在要用如下 L型的积木拼到这个图中,使得方格图正好被拼满,请问总共有多少种拼法。其中,方格图的每一个方格正好能放积木中的一块。积木可以任意旋转。 输入格式 输入的第一行包含两个整数 n, m,表示方格图的大小。 输出格
34、式 输出一行,表示可以放的方案数,由于方案数可能很多,所以请输出方案数除以 1,000,000,007的余数。 样例输入 6 2 样例输出 4 样例说明 四种拼法如下图所示: 评测用例规模与约定 在评测时将使用 10个评测用例对你的程序进行评测。 评测用例 1和 2满足: 1=n=30, m=2。 评测用例 3和 4满足: 1=n, m=6。 评测用例 5满足: 1=n=100, 1=m=6。 评测用例 6和 7满足: 1=n=1000, 1=m=6。 评测用例 8、 9和 10满足: 1=n=1015, 1=m=7。 试题编号: 201412-1 试题名称: 门禁系统 时间限制: 1.0s
35、内存限制: 256.0MB 问题描述: 问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。 输入格式 输入的第一行包含一个整数 n,表示涛涛的记录条数。 第二行包含 n个整数,依次表示涛涛的记录中每位读者的编号。 输出格式 输出一行,包含 n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。 样例输入 5 1 2 1 1 3 样例输出 1 1 2 3 1 评测用例规模与约定 1 n 1,000,读者的编号为不超过 n的正整数。 试题编号: 201412-2
36、试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行 Z字形扫描(Zigzag Scan)。给定一个 n n的矩阵, Z字形扫描的过程如下图所示: 对于下面的 4 4的矩阵, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行 Z字形扫描后得到长度为 16 的序列: 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 请实现一个 Z字形扫描的程序,给定一个 n n的矩阵,输出对这个矩阵进行 Z字形扫描的结果。 输入格式 输入的第一行包含一个整数 n,表示矩阵的大小。 输
37、入的第二行到第 n+1 行每行包含 n个正整数,由空格分隔,表示给定的矩阵。 输出格式 输出一行,包含 n n个整数,由空格分隔,表示输入的矩阵经过 Z字形扫描后的结果。 样例输入 4 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 样例输出 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 评测用例规模与约定 1 n 500,矩阵元素为不超过 1000的正整数。 试题编号: 201412-3 试题名称: 集合竞价 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价
38、和开盘成交量。 该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种: 1. buy p s 表示一个购买股票的买单,每手出价为 p,购买股数为s。 2. sell p s 表示一个出售股票的卖单,每手出价为 p,出售股数为 s。 3. cancel i表示撤销第 i行的记录。 如果开盘价为 p0,则系统可以将所有出价至少为 p0的买单和所有出价至多为 p0的卖单进行匹配。因此,此时的开盘成交量为出价至少为 p0的买单的总股数和所有出价至多为 p0的卖单的总股数之间的较小值。 你的程序需要确定一个开盘价,使得开盘成交量尽可能地大。如果有多个符合条件的开盘价,你的程序应当输出最高的那一
39、个。 输入格式 输入数据有任意多行,每一行是一条记录。保证输入合法。股数为不超过 108的正整数,出价为精确到恰好小数点后两位的正实数,且不超过 10000.00。 输出格式 你需要输出一行,包含两个数,以一个空格分隔。第一个数是开盘价,第二个是此开盘价下的成交量。开盘价需要精确到小数点后恰好两位。 样例输入 buy 9.25 100 buy 8.88 175 sell 9.00 1000 buy 9.00 400 sell 8.92 400 cancel 1 buy 100.00 50 样例输出 9.00 450 评测用例规模与约定 对于 100%的数据,输入的行数不超过 5000。 试题编
40、号: 201412-4 试题名称: 最优灌溉 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉。 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也 可以利用部分麦田作为“中转站”,利用水渠连接不同的麦田,这样只要一片麦田能被灌溉,则与其连接的麦田也能被灌溉。 现在雷雷知道哪些麦田之间可以建设水渠和建设每个水渠所需要的费用(注意不是所有麦田之间都可以建立水渠)。请问灌溉所有麦田最少需要多少费用来修建水渠。 输入格式 输入的第一行包含两个正整数 n, m,分别表
41、示麦田的片数和雷雷可以建立的水渠的数量。麦田使用 1, 2, 3, 依次标号。 接下来 m行,每行包含三个整数 ai, bi, ci,表示第 ai片麦田与第bi片麦田之间可以建立一条水渠,所需 要的费用为 ci。 输出格式 输出一行,包含一个整数,表示灌溉所有麦田所需要的最小费用。 样例输入 4 4 1 2 1 2 3 4 2 4 2 3 4 3 样例输出 6 样例说明 建立以下三条水渠:麦田 1与麦田 2、麦田 2与麦田 4、麦田 4与麦田 3。 评测用例规模与约定 前 20%的评测用例满足: n 5。 前 40%的评测用例满足: n 20。 前 60%的评测用例满足: n 100。 所有评
42、测用例都满足: 1 n 1000, 1 m 100,000, 1 ci 10,000。 试题编号: 201412-5 试题名称: 货物调度 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 某公司要处理一个周期性的物流问题。 有 n个城市,第 i个城市在每周的第 j(1 j 7) 天会生产 aij吨某种货物,同时需要消耗 bij吨该种货物。已知每周的产量等于消耗量(即aij之和等于 bij之和)。 城市之间有 m条道路,第 k条道路连接了城市 sk和 tk。一条道路上运输 1吨货物有一个固定的成本 ck。道路都可以双向使用。每天运输的货物量没有限制。城市之间的距离并不远,
43、货物可以从任意一个城市运输到任意另一个城市并且在当天到达。 货物如果在当天没有被消耗掉,就需要存放在仓库里过夜。第 i个城市的仓库容量为 vi,存放 1 吨货物过一夜所需的成本是 wi。 请你计算该公司如果每周循环性地按照一个固定的流程调度货物的话,该公司在最优方案下每周需要为货物的运输和存储消耗多少成本。 输入格式 输入的第一行有两个正整数 n和 m,即城市的个数和道路的条数。 接下来有 n行,每行包含 16 个整数,用以描述第 i个城市的相关数据。其中第 i行包含的数为 ai1, ai2, ai3, ai4, ai5, ai6, ai7, bi1, bi2, bi3, bi4, bi5,
44、bi6, bi7, vi, wi。 接下来有 m行,每行包含 3个整数,用以描述一条道路的相关数据。其中第 k行包含的数为 sk, tk和 ck。 输入数据中城市的编号均为 1到 n之间。输入数据的每行的行首行尾均保证没有空格,两个数之间恰好被一个空格隔开。 输出格式 你只需要输出一个数,即最优方案下每周的支出。 样例输入 3 3 0 0 0 0 5 0 0 0 0 0 0 0 0 0 2 4 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 2 5 1 2 1 1 3 5 2 3 1 样例输出 67 样例说明 城市 1 每
45、周五生产 5 吨货物,把其中 2 吨运到存储费用低廉的城市 2 存储,把 1 吨运到城市 3 存储,剩下的 2 吨留在城市 1。 在次周一的时候城市 2 会消耗掉存放在那里的 2 吨货物。为了节约存储成本,将囤放在城市 1 的货物运到城市 2 存放。周三再将所有货物运到城市 3 以满足该城市的需求。 在此方案下,每周的运输成本为 8,每周的存储成本为 59,因此每周的总支出为 67。 评 测用例规模与约定 对于 100%的数据, 1 n 100, 1 m 500, 0 aij,bij,vi 100, 1 wi,ck 100。 试题编号: 201503-1 试题名称: 图像旋转 时间限制: 5.
46、0s 内存限制: 256.0MB 问题描述: 问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转 90 度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式 输入的第一行包含两个整数 n, m,分别表示图像矩阵的行 数和列数。 接下来 n行每行包含 m个整数,表示输入的图像。 输出格式 输出 m行,每行包含 n个整数,表示原始矩阵逆时针旋转 90 度后的矩阵。 样例输入 2 3 1 5 3 3 2 4 样例输出 3 4 5 2 1 3 评测用例规模与约定 1 n, m 1,000,矩阵中的数都是不超过 1000的非负整
47、数。 试题编号: 201503-2 试题名称: 数字排序 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定 n个整数,请统计出每个整数出现的次数,按出现次 数从多到少的顺序输出。 输入格式 输入的第一行包含一个整数 n,表示给定数字的个数。 第二行包含 n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 5 2 3 3 1 3 4 2 5 2 3 5 样例输出 3 4 2 3
48、 5 3 1 1 4 1 评测用例规模与约定 1 n 1000,给出的数都是 不超过 1000的非负整数。 试题编号: 201503-3 试题名称: 节日 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有一类节日的日期并不是固定的,而是以“ a月的第 b个星期 c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。 现在,给你 a, b, c和 y1, y2(1850 y1, y2 2050),希望你输出从公元 y1年到公元 y2年间的每年的 a月的第 b个星期 c的日期。 提示:关于闰年的规则:年份是 400的整数倍时是闰年,否则年份是 4 的 倍数并且不
49、是 100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而 2000年是闰年。 为了方便你推算,已知 1850 年 1月 1日是星期二。 输入格式 输入包含恰好一行,有五个整数 a, b, c, y1, y2。其中 c=1, 2, , 6, 7分别表示星期一、二、六、日。 输出格式 对于 y1和 y2之间的每一个年份,包括 y1和 y2,按照年份从小到大的顺序输出一行。 如果该年的 a月第 b个星期 c确实存在,则以 “yyyy/mm/dd“的格式输出,即输出四位数的年份,两位数的月份, 两位数的日期,中间用斜杠“ /”分隔,位数不足时前补零。 如果该年的 a月第 b个星期 c并不存在,则输出 “none“(不包含双引号 )。 样例输入 5 2 7 2014 2015 样例输出 2014/05/11 2015/05/10 评测用例规模与约定 所有评测用例都满足: 1 a 12