A.XOR Mixup
有一个数组 a 包含 n−1 个整数。设 xx是数组所有元素按位与的结果。将数字 x 添加到数组 a 的末尾进行洗牌。形成的数组a 。给定重组后的数组求出任意一个x ?
思路:考虑到本题n<=100,故采用暴力枚举,枚举出出每一个可能的情况,得到第一个正确解时停止枚举
代码如下
B.
有 n 堆沙子,其中第 i 堆有 ai 块沙子。如果有 1<i<n和 ai>ai−1+ai+1,则 ii/th堆被称为太高。位于数组两端的堆不可能太高。
给出整数 k 。操作 k个连续的沙堆,并在所有沙堆上添加一个单位的沙子。形式上,选取 1≤l,r≤n、 ,使得 r−l+1=k 。然后对所有的 l≤i≤r 更新 ai←ai+1 。
经过一些(可能为零)操作后,同时太高的桩的最大数量是多少?
思路:模拟题,首先遍历数组得到操作前堆太高的桩的数目,注意到:k==1时堆太高的桩的数目必为(n-1)/2,k!=1时,无论怎么选取都不改变总数。
代码如下
C. Sum of Cubes
给你一个正整数 x 。检验数字 x 是否可以表示为两个正整数的立方之和。
思路:由于x<10的12次方,故最多为10000的的立方,故采用暴力枚举,枚举出0-10000每一个数的立方并用map记录。
代码如下
D. Permutation Transformation
给出长度为 n 的整数序列,从 1 到 n所有数字都正好出现一次。一个长度为 n 的排列 a[1…n] ,排列组合 a 转化为有根的二叉树。将一个由不同整数组成的数组转化为一棵树的过程如下:
- 数组的最大元素成为树的根;
- 最大值左边的所有元素 - 形成一棵左子树(根据相同的规则建立,但适用于数组的左边部分),但如果最大值左边没有元素,则根没有左子树;
- 最大值右边的所有元素 - 形成右子树(根据相同的规则建立,但适用于数组的右边),但如果最大值右边没有元素,则根没有右子树
我们用 dv 表示顶点 av 的深度,求出dv
思路:
本题看似考察树,实则是一题典型的递归,每次递归由头节点将数组拆分成左右两边,递归出每一小部分的情况,递归层数即深度,用数组储存
代码如下
E. Equalize the Array
一个长度为 n 的数组 a 。如果存在一个数字 C ,使得数组中的每个数字要么出现 0 次,要么出现 C 次,那么认为这个数组就是美丽的。从数组 a中删除一些元素,使数组变得美丽。确定从数组 a中移除最少多少个元素才能使数组 aa 变得美丽
思路:本题采用暴力枚举,用unorderedmap记录出现次数,并求出总和,再遍历成数组进行sort排序,最后再遍历数组得出所有情况中最少的情况,复杂度为O(n)
代码如下
F. 3SUM Closure
一个长度为 n 的数组 a 。如果对于所有不同的索引 i , j , k ,和 ai+aj+ak 都是数组的元素,那么这个数组称为 3SUM 闭合数组。判断 aa 是否 3SUM 闭合。
思路:本题考查数学有关思维,注意到,当非正数或非负数大于3时,数组永远不可能闭合,故分类讨论总数在5以内的所有情况
代码如下: