【cf复盘】7.16个人训练

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以内的所有情况

代码如下:

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值