PTA 暑期
PTA 暑期
追寻远方的人
你的职责是平整土地,而非焦虑时光。
展开
-
7-13 挑苹果 (35 point(s))
7-13 挑苹果 (35 point(s))妈妈买了N个苹果,每个苹果都有对应的美味度。为了公平,妈妈规定小红和小明需要轮流从剩余的苹果中选择最左边的苹果或者最右边的苹果吃,小红先选。小明和小红想要自己吃到苹果的美味度的总和尽可能大,假如小红和小明足够聪明,每次都用最优的策略选择苹果,现在需要你求出小红吃到苹果的美味度的总和。输入格式:第一行输入一个正整数N(1≤N≤100)第二行输入N个正整数,表示从左到右苹果的美味度输出格式:输出一个数,表示小红能吃到的苹果的美味度的总和。输入样例1:原创 2022-03-26 21:32:30 · 641 阅读 · 0 评论 -
7-12 风雪火车站 (25 point(s))
7-12 风雪火车站 (25 point(s))B国共有 n 座城市,分别编号为 1,2,…,n。你所在地点的编号是 s ,火车站的编号是 t。有 m 条道路连接这些城市,它们的长度分别为 w**i。为了便于绘制地图,B国的道路规划保证每条道路严格地连接两个不同的地点,并且不会有两条道路连接的两个地点相同。 你的走路速度是 1m/s。开始时,地点 i 的积雪深度为 h**i 。每秒钟地面上积雪的厚度会增加 q 。每个地点都有一个步行的极限雪深 l**i ,如果到达此地时此地的雪深 ,你会被困在这个点,原创 2022-03-26 21:31:58 · 128 阅读 · 0 评论 -
7-11 加密信息 (25 point(s))
7-11 加密信息 (25 point(s))给定一个长度为n(n<=5×105)的加密字符串S,解密方式如下:1.初始时字符串T为空.2.从头遍历S字符串,令i=1,2,3…,n, 若S的第i个字符是R,那么翻转字符串T,否则将该字符加入字符串T中.\3. 在上述操作结束后,若T串有两个连续的字符相同, 那么就删除这两个字符,直到T串中没有两个相同的连续字符为止.那么T串就是最终解密完毕的字符串.输入格式:输入一个加密字符串SS输出格式:输出最后解密完毕的字符串TT输入样原创 2022-03-26 21:31:30 · 195 阅读 · 0 评论 -
7-20 最小生成树的唯一性 (35 point(s))
7-20 最小生成树的唯一性 (35 point(s))给定一个带权无向图,如果是连通图,则至少存在一棵最小生成树,有时最小生成树并不唯一。本题就要求你计算最小生成树的总权重,并且判断其是否唯一。输入格式:首先第一行给出两个整数:无向图中顶点数 N(≤500)和边数 M。随后 M 行,每行给出一条边的两个端点和权重,格式为“顶点1 顶点2 权重”,其中顶点从 1 到N 编号,权重为正整数。题目保证最小生成树的总权重不会超过 230。输出格式:如果存在最小生成树,首先在第一行输出其总权重,第二行输出原创 2022-03-22 09:38:05 · 1094 阅读 · 2 评论 -
7-7 约瑟夫问题变形 (10 point(s))
# 7-7 约瑟夫问题变形 (10 point(s))编号为1…N的N个小朋友玩游戏,他们按编号顺时针围成一圈,按顺时针次序报数,从第1个人报到第M个人出列;然后再从下个人开始报到第M+1个人出列;再从下一个人开始报到第M+2个人出列……以此类推不断循环,直至最后一人出列。请编写程序按顺序输出出列人的编号。 输入格式:输入为2个整数,分别表示N、M(1≤N,M,K≤10000)。输出格式:输出为一行整数,为出列人的编号。每个整数后一个空格。输入样例1:6 3输出样例1:3 1 2 6 4原创 2022-03-03 16:38:16 · 5729 阅读 · 1 评论 -
11-散列4 Hashing - Hard Version (30 分)
11-散列4 Hashing - Hard Version (30 分)Given a hash table of size N, we can define a hash function H(x)=x%N. Suppose that the linear probing is used to solve collisions, we can easily obtain the status of the hash table with a given sequence of input numbers原创 2021-12-11 20:15:07 · 413 阅读 · 0 评论 -
5 打印选课学生名单 (25 分)
5 打印选课学生名单 (25 分)假设全校有最多40000名学生和最多2500门课程。现给出每个学生的选课清单,要求输出每门课的选课学生名单。输入格式:输入的第一行是两个正整数:N(≤40000),为全校学生总数;K(≤2500),为总课程数。此后N行,每行包括一个学生姓名(3个大写英文字母+1位数字)、一个正整数C(≤20)代表该生所选的课程门数、随后是C个课程编号。简单起见,课程从1到K编号。输出格式:顺序输出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号和选课学生总数原创 2021-12-08 13:14:47 · 172 阅读 · 0 评论 -
4 整型关键字的散列映射 (25 分)
4 整型关键字的散列映射 (25 分)给定一系列整型关键字和素数P,用除留余数法定义的散列函数H(Key)=Key将关键字映射到长度为P的散列表中。用线性探测法解决冲突。输入格式:输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。输出格式:在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。输入样例:4 524 15 61 88结尾无空行输出样例:原创 2021-12-08 13:13:29 · 427 阅读 · 0 评论 -
3 搜索树判断 (25 分)
3 搜索树判断 (25 分)对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树。现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。输入格式:输入的第一行包含一个正整数N(≤1000),第二行包含N个整数,为给出的整数键值序列,数字间以空格分隔。输出格式:输出的第一行首先给出判断结果,如原创 2021-12-08 13:12:59 · 251 阅读 · 0 评论 -
11-散列2 Hashing (25 分)
11-散列2 Hashing (25 分)The task of this problem is simple: insert a sequence of distinct positive integers into a hash table, and output the positions of the input numbers. The hash function is defined to be H(k**ey)=k**ey%TSize where TSize is the maximum s原创 2021-11-26 12:09:43 · 92 阅读 · 0 评论 -
08-图9 关键活动 (30 分)
08-图9 关键活动 (30 分)假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系,比如C程序设计和数据结构两门课,必须先学习前者。但是需要注意的是,对一组子原创 2021-11-22 15:05:54 · 113 阅读 · 0 评论 -
08-图8 How Long Does It Take (25 分)
08-图8 How Long Does It Take (25 分)Given the relations of all the activities of a project, you are supposed to find the earliest completion time of the project.Input Specification:Each input file contains one test case. Each case starts with a line conta原创 2021-11-21 15:34:09 · 117 阅读 · 0 评论 -
08-图7 公路村村通 (30 分)
08-图7 公路村村通 (30 分)现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。输入样例:6 151 2原创 2021-11-20 21:44:04 · 128 阅读 · 0 评论 -
07-图5 Saving James Bond - Hard Version (30 分)
07-图5 Saving James Bond - Hard Version (30 分)This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the cen原创 2021-11-20 21:06:51 · 1295 阅读 · 0 评论 -
06-图3 六度空间 (30 分)
06-图3 六度空间 (30 分)“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5iTz3uK2-1637377330943)(06-%E5%9B%BE3%20%E5%85%AD%E5%BA%A6%E7%A9%BA%E9%97%B4%20(3原创 2021-11-20 11:02:32 · 114 阅读 · 0 评论 -
06-图2 Saving James Bond - Easy Version (25 分)
06-图2 Saving James Bond - Easy Version (25 分)This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the cen原创 2021-11-20 10:12:51 · 63 阅读 · 0 评论 -
7-9 Huffman Codes (30 分)
7-9 Huffman Codes (30 分)In 1953, David A. Huffman published his paper “A Method for the Construction of Minimum-Redundancy Codes”, and hence printed his name in the history of computer science. As a professor who gives the final exam problem on Huffman co原创 2021-11-18 21:16:37 · 192 阅读 · 0 评论 -
04-树7 二叉搜索树的操作集 (30 分)
04-树7 二叉搜索树的操作集 (30 分)本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindMin( BinTree BST );Position FindMax( BinTree BST );原创 2021-11-18 16:03:27 · 112 阅读 · 0 评论 -
01-复杂度3 二分查找 (20 分)
01-复杂度3 二分查找 (20 分)本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */};L是用户传入的一个线原创 2021-11-18 16:02:57 · 94 阅读 · 0 评论 -
04-树6 Complete Binary Search Tree (30 分)
04-树6 Complete Binary Search Tree (30 分)A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than the node’s key.The right subtree of a node c原创 2021-11-18 14:28:19 · 66 阅读 · 0 评论 -
04-树5 Root of AVL Tree (25 分)
04-树5 Root of AVL Tree (25 分)An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this prop原创 2021-11-17 22:08:10 · 163 阅读 · 0 评论 -
03-树3 Tree Traversals Again (25 分)
03-树3 Tree Traversals Again (25 分)An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stack operations are: pus原创 2021-11-17 11:00:50 · 59 阅读 · 0 评论 -
7-3 顺序存储的二叉树的最近的公共祖先问题 (20 分)
7-3 顺序存储的二叉树的最近的公共祖先问题 (20 分)设顺序存储的二叉树中有编号为i和j的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。输入格式:输入第1行给出正整数n(≤1000),即顺序存储的最大容量;第2行给出n个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树);第3行给出一对结点编号i和j。题目保证输入正确对应一棵二叉树,且1≤i,j≤n。输出格式:如果i或j对应的是空结点,则输出ERROR: T[x] is NULL,其中x是i原创 2021-11-13 11:27:13 · 299 阅读 · 0 评论 -
7-2 树种统计 (20 分)
7-2 树种统计 (20 分)随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。输入格式:输入首先给出正整数N(≤105),随后N行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过30个英文字母和空格组成(大小写不区分)。输出格式:按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位。输入样例:29Red AlderAshAspenBasswoodAshBeec原创 2021-11-13 10:57:41 · 145 阅读 · 0 评论 -
7-1 树的同构 (20 分)
7-1 树的同构 (20 分)给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i原创 2021-11-13 10:33:10 · 232 阅读 · 1 评论 -
6-2 邻接表存储图的广度优先遍历 (20 分)
6-2 邻接表存储图的广度优先遍历 (20 分)试实现邻接表存储图的广度优先遍历。函数接口定义:void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) );其中LGraph是邻接表存储的图,定义如下:/* 邻接点的定义 */typedef struct AdjVNode *PtrToAdjVNode; struct AdjVNode{ Vertex AdjV; /* 邻接点下标 */ PtrToAdjVN原创 2021-11-10 20:58:54 · 173 阅读 · 0 评论 -
6-1 邻接矩阵存储图的深度优先遍历 (20 分)
6-1 邻接矩阵存储图的深度优先遍历 (20 分)试实现邻接矩阵存储图的深度优先遍历。函数接口定义:void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );其中MGraph是邻接矩阵存储的图,定义如下:typedef struct GNode *PtrToGNode;struct GNode{ int Nv; /* 顶点数 */ int Ne; /* 边数 */ WeightType G[MaxVert原创 2021-11-10 20:58:22 · 128 阅读 · 0 评论 -
2-3 社交网络图中结点的“重要性”计算 (25 分)
2-3 社交网络图中结点的“重要性”计算 (25 分)在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来。他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用,可以增强也可以减弱。而结点根据其所处的位置不同,其在网络中体现的重要性也不尽相同。“紧密度中心性”是用来衡量一个结点到达其它结点的“快慢”的指标,即一个有较高中心性的结点比有较低中心性的结点能够更快地(平均意义下)到达网络中的其它结点,因而在该网络的传播过程中有更重要的价值。在有N个结点的网络中,结点v原创 2021-11-06 17:02:52 · 158 阅读 · 0 评论 -
2-1 是否同一棵二叉搜索树 (35 分)
2-1 是否同一棵二叉搜索树 (35 分)给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。随后L原创 2021-11-03 20:11:59 · 1062 阅读 · 0 评论 -
3-10 串的模式匹配 (20 分)
3-10 串的模式匹配 (20 分)给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:数据0:小规模字符串,测试基本正确性;数据1:随机数据,String 长度为 105,Pattern 长度为 10;数据2:随机数据,String 长度为 105,Patte原创 2021-10-03 12:09:42 · 169 阅读 · 0 评论 -
3-9 堆栈模拟队列 (20 分)
3-9 堆栈模拟队列 (20 分)设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:int IsFull(Stack S):判断堆栈S是否已满,返回1或0;int IsEmpty (Stack S ):判断堆栈S是否为空,返回1或0;void Push(Stack S, ElementType item ):将元素item压入堆栈S;ElementType Pop(Stack S ):删除并返回S的栈顶元素。实现队列的操作原创 2021-10-03 10:56:02 · 116 阅读 · 0 评论 -
3-5 单链表分段逆转 (20 分)
3-5 单链表分段逆转 (20 分)给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4;如果 K=4,则应该得到 4→3→2→1→5→6。函数接口定义:void K_Reverse( List L, int K );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /原创 2021-10-03 09:44:06 · 793 阅读 · 0 评论 -
2-10 出栈序列的合法性 (20 分)
2-10 出栈序列的合法性 (20 分)给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, …, N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5、N=7,则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 },但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。输入格式:输入第一行给出 3 个不超过 1000 的正整数:M(堆栈最大容量)、N(入栈元素个数)、K(待检查的出栈序列个数)。最后 K 行,每行给出 N 个数字的出栈序列。所原创 2021-09-17 09:09:45 · 149 阅读 · 0 评论 -
2-9 彩虹瓶 (20 分)
2-9 彩虹瓶 (20 分)彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工厂里有每种颜色的小球各一箱,工人需要一箱一箱地将小球从工厂里搬到装填场地。如果搬来的这箱小球正好是可以装填的颜色,就直接拆箱装填;如果不是,就把箱子先码放在一个临时货架上,码放的方法就是一箱一箱堆上去。当一种颜色装填完以后,先看看货架顶端的一箱是不是下一个要装填的颜色,如果是原创 2021-09-17 09:09:22 · 67 阅读 · 0 评论 -
2-8 符号配对 (20 分)
2-8 符号配对 (20 分)请编写程序检查C语言源程序中下列符号是否配对:/*与*/、(与)、[与]、{与}。输入格式:输入为一个C语言源程序。当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束。程序中需要检查配对的符号不超过100个。输出格式:首先,如果所有符号配对正确,则在第一行中输出YES,否则输出NO。然后在第二行中指出第一个不配对的符号:如果缺少左符号,则输出?-右符号;如果缺少右符号,则输出左符号-?。输入样例1:void test(){ int i, A[1原创 2021-09-17 07:57:59 · 156 阅读 · 0 评论 -
7-1 这是2的幂么? (10 分)
7-1 这是2的幂么? (10 分)在类Tool中定义一个方法 isPower,要求对于形参num(num>0),判断num是不是2的幂,如果是返回true,否则返回false 在Main类中main方法中调用此方法,输入一个大于0的整数,调用isPower方法,如果是2的幂,输出yes,否则输出no 输入如果是0或者小于0的整数,输出error输入格式:输入一个整数例如5输出格式:输出结果例如no输入样例:在这里给出一组输入。例如:15结尾无空行8结尾无空行-4结尾无空行原创 2021-09-05 17:09:56 · 465 阅读 · 0 评论 -
7-6 or 7 修理牧场 (25 分)
7-6 or 7 修理牧场 (25 分)农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L**i个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是L**i的总和。但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则原创 2021-09-04 12:08:52 · 186 阅读 · 0 评论 -
7-5 重排链表 (25 分)
7-5 重排链表 (25 分)给定一个单链表 L1→L2→⋯→L**n−1→L**n,请编写程序将链表重新排列为 L**n→L1→L**n−1→L2→⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。输入格式:每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤105)。结点的地址是5位非负整数,NULL地址用−1表示。接下来有N行,每行格式为:Address Data Next其中Address是结点地址;Data是该结点原创 2021-09-04 11:45:31 · 418 阅读 · 0 评论 -
1-3 表达式转换 (25 分)
1-3 表达式转换 (25 分)算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:2+3*(7-4)+8/4结尾无空行输出样例:2 3 7 4原创 2021-09-01 20:26:27 · 287 阅读 · 0 评论 -
1-4 列车厢调度 (25 分)
1-4 列车厢调度 (25 分) 1 ====== <--移动方向 / 3 ===== \ 2 ====== -->移动方向 大家或许在某些数据结构教材上见到过“列车厢调度问题”(当然没见过也不要紧)。今天,我们就来实际操作一下列车厢的调度。对照上方的ASCII字符图,问题描述如下:有三条平行的列车轨道(1、2、3)以及1-3和2-3两段连接轨道。现有一列车厢停在1号轨道上,请利用两条连接轨道以及3号轨道原创 2021-09-01 16:47:33 · 175 阅读 · 0 评论