广联达笔试 2020 7 29
第一题
杰夫非常喜欢种草,他自己有一片草地,为了方便起见,我们把这片草地看成一行从左到右,并且第 i 个位置的草的高度是hi。
杰夫在商店中购买了m瓶魔法药剂,每瓶魔法药剂可以让一株草长高x,杰夫希望每次都能有针对性的使用药剂,也就是让当前长得最矮的小草尽量高,现在杰夫想请你告诉他在使用了m瓶魔法药剂之后,最矮的小草在这种情况下最高能到多少。
输入描述
第一行三个整数n, m, x分别表示小草的个数,魔法药剂的个数以及每瓶魔法药剂让小草长高的高度。(1≤n,m,x≤1e5)
第二行n个整数分别表示第i株小草的高度ai。(1≤ai≤1e9)
输出描述
使用了m瓶药剂之后最矮的小草的最高高度。
样例
输入
3 2 3
3 3 7
输出
6
代码
package 广联达;import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;public class Question1 {public static void main(String[] args) {Queue<Integer> q = new PriorityQueue<>();Scanner sc = new Scanner( System.in );int n,m,x;n = sc.nextInt();//n 小草的个数m = sc.nextInt();//m 瓶药剂x = sc.nextInt();//x 长高的高度int temp;for( int i = 0 ; i < n ; i ++ ){temp = sc.nextInt();q.add( temp );}for( int i = 0 ; i < m ; i ++ ){temp = q.poll() + x;q.add( temp );}System.out.println( q.poll() );}
}
第二题
我们希望一个序列中的元素是各不相同的,但是理想和现实往往是有差距的。现在给出一个序列A,其中难免有些相同的元素,
现在提供了一种变化方式,使得经过若干次操作后一定可以得到一个元素各不相同的序列。
这个操作是这样的,令x为序列中最小的有重复的数字,你需要删除序列左数第一个x,并把第二个x替换为2*x。
请你输出最终的序列。
例如原序列是[2,2,1,1,1],一次变换后变为[2,2,2,1],两次变换后变为[4,2,1],变换结束
输入描述
输入第一行包含一个正整数n,表示序列的长度为n。(1<=n<=50000)
第二行有n个整数,初始序列中的元素。(1<=a_i<=10^8)
输出描述
输出包含若干个整数,即最终变换之后的结果。
样例
输入
5
2 2 1 1 1
输出
4 2 1
代码:不知道代码的是否能AC,没得测了...仅记录,提供思路。现在知道了,我自己写的代码没有考虑,原数组的顺序,这个也简单,用map记录一下就行了。
package 广联达;import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
import java.util.Vector;public class Question2 {//优先级队列public static Queue<Integer> q = new PriorityQueue<>();//优先级队列public static Vector<Integer> v = new Vector<>();使用自定义的队列,使其降序排列//public int compare(Integer e1, Integer e2) {// return e2 - e1;//}//判断队列中的前两个数字是否相等public static boolean judge(){//如果此时数量不足,那么将优先级队列中的数直接给vectorif( q.size() < 2 ){return false;}else{//如果此时优先级队列中的值大于1int first = q.poll();int second = q.peek();//这里少抛出一次q.add( first );//如果相等才进行自我合并if( first == second ){return true;}return false;}}public static void main(String[] args) {/*** 解题的想法,找一个可变的容器,并且其内部会自动排序* 那么想到了优先级队列,因为时间复杂度允许,1s,优先级队列的时间复杂度是nlogn(不超过80000就行)*/Scanner sc = new Scanner( System.in );//n个数int n = sc.nextInt();int temp;for( int i = 0 ; i < n ; i ++ ){temp = sc.nextInt();q.add( temp );}//用来进行合并的两个数int first,second;while ( !q.isEmpty() ){//进行判断,看是否是进行合并还是进行 “ 转移 ”//如果返回true,说明能进行合并if( judge() ){first = q.poll();second = q.poll();q.add( first * 2 );}else{v.add( q.poll() );}}//输出vectorSystem.out.print( v.get(0) );for( int i = 1 ; i < v.size() ; i ++ ){System.out.print( " " + v.get( i ) );}}
}//第二种解法
//来自 https://www.nowcoder.com/discuss/462425?type=all&order=time&pos=&page=1&channel=666&source_id=search_all
public class Question222 {public static void setAdd(Set<Integer> set, Integer i) {//如果已经有这个数了,那么将其移除,再乘以2if (!set.add(i)) {set.remove(i);setAdd(set, i << 1);}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();Integer[] array = new Integer[n];for (int i = 0; i < array.length; i++) {array[i] = scanner.nextInt();}//前面都是进行正常的输入LinkedHashSet<Integer> res = new LinkedHashSet<>();for (int i = 0; i < array.length; i++) {//挨个放入,如果已经有这个数字了,那么进行移除,并且乘以2setAdd(res, array[i]);}//后面进行正常的输出Iterator<Integer> iterator = res.iterator();while (iterator.hasNext()) {System.out.print(iterator.next());if (iterator.hasNext()) System.out.print(" ");}}}
第三题
同同在玩积木,每个积木上都有一个独一无二的二进制数字。同同的积木有特殊的规则,只有满足规则的积木才能被垒到一起。
对于一个积木,如果积木上写的数字是a,则对于所有的写着数字b的积木,只要满足a∩b=b,其中∩代表二进制与运算,则积木b可以放到积木a的上面。每一堆积木最多仅有一个积木可以充当底座,被放在底座上的所有积木都必须满足上述关系。(只要底座和积木满足关系即可以放在一堆,不需要考虑如何码放)
同同有一只笔,只能使用一次,效果是把某一个积木上数字的某一位从0改成1或者从1改成0。请问同同最少能让积木分在几堆里。
二进制与运算的定义:对于两个数a,b,写出它们的二进制形式a0a1am...和b0b1bm,设c 为与运算的结果,则有当a0和b0同时为1 时c0为1,其他位同理。
输入描述
第一行两个数n,m(1≤m≤20,1≤n≤min(10^5,2m)),分别代表积木的数量和积木上数字对应二进制位最多有几位
第二行n个整数a1,a2,...,an(0≤ai≤2m),代表每个积木上写的二进制数字的十进制表示形式。
输入保证每个积木上的数字不重复。
输出描述
一行一个整数代表最少的堆数。
样例
输入
5 4
10 2 4 8 9
输出
2
提示
样例数据
五个数的二进制形式分别是
1010
0010
0100
1000
1001
首先可以吧数字为8,9的两个积木放到同一堆,数字为10,20的积木放在同一堆,然后把4的最高位从1改成0,这样就变成了0,可以与第一个积木放到同一堆。一共两堆。
广联达笔试 2020 7 29相关推荐
- 【不忘初心】Win10_20H2_2009_19042.572_X64_六合一_[纯净精简版](2020.10.29)
母版来自MSDN WIN10_20H2.19042.508,集成补到19041.572,20H2相比1909 2004版本要稳定很多,精简起来也比较顺手,相对来说体积比之前的要小一些,精简方法基本上 ...
- 2020.10.29腾讯QQ音乐社招前端电话一面总结
2020.10.29腾讯QQ音乐社招前端电话一面总结 面试官晚上19:16打过来的,聊了44分钟,到八点准时结束.无论过没过,都记录一下面试过程吧,是问了几个大问题,在几个大问题的基础上根据你的回答, ...
- 时间格式转换 Mon Aug 17 2020 16:29:29 GMT+0800 (中国标准时间)
留个记录,回头直接拿着用 // Mon Aug 17 2020 16:29:29 GMT+0800 (中国标准时间) 转 年月日时分秒 function timeD(time) { let d ...
- 第三轮测试卷一(2020.10.29)
第三轮测试卷一(2020.10.29) 铺石板,输入n x m的广场,和a x a的石板,求最少需要多少石板? /* 算法思想:没啥.... 理解向上取整就行 */num=((n+a-1)/a)*(( ...
- 前仿真和后仿真的区别,按键消抖设计思想、PLL使用、ODDR2的原语使用 --2020/10/29工作总结
2020/10/29工作总结 前仿真和后仿真的区别 前仿真 综合后仿真 后仿真 synthesize和implement.generate bitstream 参考链接 按键消抖设计思想 PLL使用 ...
- 2020.8.26广联达笔试第二题——魔法师四种元素平衡(Python)
Python编程实现,魔法师的四种元素平衡. 题目简述:魔法师有四种属性,当四种属性的值相同时最好.在修炼时,魔法师可以通过将任意两种属性转化为任意一种其他属性,来进行平衡性调整.试问魔法师当前的四种 ...
- 2020.4.29华为笔试【华为校园招聘 软件】
1.给定一个字符串(最多包含8个字符),可能包含重复的字母,返回有多少种不同的排列组合. 输入样例:abc 输出:6 tips:如果字符串为空,输出0. 思路:类似于leetcode47题,枚举每一个 ...
- 记阿里笔试2020.3.23惨痛经历
一共两个题.笔试时先通读了两个题的题目.因为第二题有思路觉得简单就先写的第二题.结果20分钟写完代码,挑了30分钟bug,都没搞出来,最后坑在±号上. 根据记忆上题目:给你一个迷宫,包括一个起点'S' ...
- 烟草局计算机笔试,2020年广西南宁烟草局什么时候笔试?
最近广西烟草局各地市社招通知频发,南宁烟草局报名截止至今都无任何消息,根据往年的考情,通知近期很大可能会发布,将于6月底完成笔面!你备考好了吗? 今天广西中公国企小编来给大家说一下南宁烟草局社招的笔试 ...
最新文章
- interrupt InterruptException
- 3d max 安装和导入rvt模型失败
- Oracle 12c 安装(内附软件包)
- Oracle connet by prior 关键字的简单介绍和用法
- 怎么让某段css代码只在Chrome 火狐 edge 浏览器生效
- 利用计算机解决的生活问题,利用计算机解决经典动力学问题
- MySQL 如何优化大分页查询?
- 计算机毕业论文答辩申请书,论文答辩申请书范文6篇
- 【论文阅读】Rethinking the Value of Network Pruning
- android10禁用华为桌面,华为禁用第三方桌面 简介办法
- 电脑XP系统最大支持多大内存?
- informix常用时间运算和操作方法
- iWatch 页面导航
- 号外号外 !新媒之家APP2.1.0版本震撼上线!!!
- 联想服务器id显示感叹号,网卡驱动安装后显示感叹号
- C++实现直接插入排序法
- onsubmit函数触发事件
- 考研 研究生 什么是考研 考研的第一课 全面了解考研 研究生
- win2008 磁盘碎片整理
- “你 100% 的时间都是 IBM 员工”,程序员的业余个人项目也属于公司?
热门文章
- ATMS启动Activity流程 - 安卓R
- 使用浏览器开发工具测试网站可访问性的七种方法
- VGGNet论文翻译——中英文对照+标注总结
- Maven简明教程(5)---依赖关系(实例篇)
- 自定义控件知识储备-LayoutParams的那些事
- 2021年中国绿色贷款情况分析:绿色贷款余额达15.9万亿元,其中基础设施绿色升级产业贷款余额占46.54%[图]
- linux网页用php文件怎么打开文件夹,如何使用浏览器访问linux本地文件
- 4 卷积核提取图片特征
- 微信小程序分享网络路径图片
- 软磁材料交流测量装置TD81系列软磁交流测试装置系统