摘要: 题意 给出两个已经递增的序列S1和S2,长度分别为N和M,求将它们合并成一个新的递增序列后的中位数(个数为偶数时为左半部分的最后一个数)。 思路 由于在给定两个子序列的长度N和M后,新序列的长度N+M就是已知的,因此中位数的位置为(N+M-1)/2(此处为向下取整)。 令计数器count初始为0,表 阅读全文
posted @ 2021-02-19 23:50 Dazzling! 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 题意 给出一个初始序列,可以将它使用插入排序或归并排序进行排序。现在给出一个序列,问它是由插入排序还是归并排序产生的,并输出下一步将会产生的序列。 思路 本题需要直接模拟插入排序和归并排序的每一步过程,其中归并排序使用非递归形式会更方便一些。整体做法为:先进行插入排序,如果执行过程中发现与给定序列吻 阅读全文
posted @ 2021-02-19 23:21 Dazzling! 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 题意 给出一个数字序列与一个数S,在数字序列中求出所有和值为S的连续子序列(区间下标左端点小的先输出,左端点相同时右端点小的先输出)。若没有这样的序列,求出和值恰好大于S的子序列(即在所有和值大于S的子序列中和值最接近S)。假设序列下标从1开始。 思路 令Sum[i]表示A[1]到A[j]的和值,即 阅读全文
posted @ 2021-02-19 20:00 Dazzling! 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 题意 给定一个正整数数对N1,N2,并给出其中一个数字的进制,请你求出另一个数字在什么进制下,两数相等成立。如果答案不唯一,则输出最小的进制数。 范围:N1和N2均不超过10个数位,且每个数位均为0 ~ 9或a ~ z,其中0 ~ 9表示数字0 ~ 9、a ~ z表示数字10 ~ 35。 思路 将已 阅读全文
posted @ 2021-02-19 19:29 Dazzling! 阅读(75) 评论(1) 推荐(0) 编辑
摘要: 题目给出的是中缀表达式,所以要计算它的值主要是两个步骤: 中缀表达式转后缀表达式。 计算后缀表达式。 下面分别讲一下这两步。 中缀表达式转后缀表达式 ①设立一个操作符栈,用以临时存放操作符;设立一个数组或者队列,用以存放后缀表达式。 ②从左至右扫描中缀表达式,如果碰到操作数(注意:操作数可能不止一位 阅读全文
posted @ 2021-02-19 16:26 Dazzling! 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 题意 从N个正整数中选择若千个数,使得选出的这些数中的最大值不超过最小值的p倍。问满足条件的选择方案中,选出的数的最大个数。 思路 由于题干中涉及序列的最大值和最小值,因此不妨先将所有N个正整数从小到大进行排序。在此基础上证明:能使选出的数个数最大的方案,一定是在该递增序列中选择连续的若千个数的方案 阅读全文
posted @ 2021-02-19 13:30 Dazzling! 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 这个题给$30$分也太拉了。 题意 给出若干可能有前导零的数字串,将它们按某个顺序拼接,使生成的数最小。 思路 很多读者看了样例,会觉得只要把这些数字串按字典序从小到大排序,然后按顺序输出就可以了。这种想法方向似乎是对的。但是来看样例中的例子: {“32”,“321”},排序结果是{“32”,“32 阅读全文
posted @ 2021-02-19 10:58 Dazzling! 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 题意 给出$0, 1,\cdots ,N-1$的一个序列,要求通过两两交换的方式将其变为递增序列,但是规定每次只能用0与其他数进行交换。求最小交换次数。 思路 由于必须使用数字0跟其他数进行交换,因此直观上可以很容易想到的策略是:如果数字0当前在i号位,则找到数字i当前所处的位置,然后把0与i进行交 阅读全文
posted @ 2021-02-19 10:24 Dazzling! 阅读(58) 评论(0) 推荐(0) 编辑