腾讯2018秋招笔试真题(2)
腾讯2018秋招笔试真题
3、画家小Q
【题目描述】画家小 Q 又开始他的艺术创作。小 Q 拿出了一块有 NxM 像素格的画板, 画板初始状态是空白
的,用’X’表示。
小 Q 有他独特的绘画技巧,每次小 Q 会选择一条斜线, 如果斜线的方向形如’/’,即斜率为 1,小 Q 会选择这
条斜线中的一段格子,都涂画为蓝色,用’B’表示;如果对角线的方向形如’\’,即斜率为-1,小 Q 会选择这条
斜线中的一段格子,都涂画为黄色,用’Y’表示。
如果一个格子既被蓝色涂画过又被黄色涂画过,那么这个格子就会变成绿色,用’G’表示。
小 Q 已经有想画出的作品的样子, 请你帮他计算一下他最少需要多少次操作完成这幅画。
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数 N 和 M(1 <= N, M <= 50), 表示画板的长宽。
接下来的 N 行包含 N 个长度为 M 的字符串, 其中包含字符’B’,’Y’,’G’,’X’,分别表示蓝色,黄色,绿色,空
白。整个表示小 Q 要完成的作品。
输出描述:
输出一个正整数, 表示小 Q 最少需要多少次操作完成绘画。
输入示例:
4 4
YXXB
XYGX
XBYY
BXXY
输出示例:
3
说明:
XXXX
XXXX
XXXX
XXXX
->
YXXX
XYXX
XXYX
XXXY
->
YXXB
XYBX
XBYX
BXXY
->
YXXB
XYGX
XBYY
BXXY
解题思路:
从(0,0)位置开始遍历
- 如果遍历到(i,j)位置为B——>则继续向左下方(i+1,j-1)和右上方(i-1,j+1)
遍历时,遇到将B置为X,遇到G置为(消除B)置为Y
count++; - 如果遍历到(i,j)位置为Y——>则继续向左上方(i-1,j-1)和右下方(i+1,j+1)
遍历时,遇到将Y置为X,遇到G置为(消除Y)置为B
count++; - 如果遍历到(i,j)位置为G——>则分别执行1,2
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;public class Main03 {static char[][] chs = new char[50][50];static int n;static int m;public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();m = in.nextInt();for(int i = 0; i < n; i++) {String str = in.next();for(int j = 0; j < m; j++) {chs[i][j] = str.charAt(j);}}int count = 0;for(int i = 0; i < n; i++) {for(int j = 0; j < m; j++) {if(chs[i][j] == 'B') {dfs_B(i, j);count++;} else if(chs[i][j] == 'Y') {dfs_Y(i, j);count++;} else if(chs[i][j] == 'G') {dfs_B(i, j);count++;dfs_Y(i, j);count++;}}}System.out.println(count);}private static void dfs_B(int i, int j) {if(i >= 0 && i < n && j >= 0 && j < m && (chs[i][j] == 'B' || chs[i][j] == 'G')) {if(chs[i][j] == 'B') {chs[i][j] = 'X';} else if(chs[i][j] == 'G'){chs[i][j] = 'Y';}dfs_B(i + 1, j - 1);dfs_B(i - 1, j + 1);}return ;}private static void dfs_Y(int i, int j) {if(i >= 0 && i < n && j >= 0 && j < m && (chs[i][j] == 'Y' || chs[i][j] == 'G')) {if(chs[i][j] == 'Y') {chs[i][j] = 'X';} else if(chs[i][j] == 'G'){chs[i][j] = 'B';}dfs_Y(i - 1, j - 1);dfs_Y(i + 1, j + 1);}return ;}
}
4、贪吃的小Q
【题目描述】小 Q 的父母要出差 N 天,走之前给小 Q 留下了 M 块巧克力。小 Q 决定每天吃的巧克力数量不
少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少
块巧克力
输入描述:
每个输入包含一个测试用例。
每 个 测 试 用 例 的 第 一 行 包 含 两 个 正 整 数 , 表 示 父 母 出 差 的 天 数 N(N<=50000) 和 巧 克 力 的 数 量
M(N<=M<=100000)。
输出描述:
输出一个数表示小 Q 第一天最多能吃多少块巧克力。
输入示例:
3 7
输出示例:
4
解题思路:
首先想到的是等比求和
首相为x是需要求的值,公比是1/2,一共有N项,满足下列方程
x + 1/2*x + …… + (1/2)^(N-1)*x = M
(等比数列求和公式)变形为——>
x*(1-(1/2)^N) / (1-1/2) = M
x = M / (2 * (1-(1/2)^N))
x求的的值即为最大值
如果x不为整数需向下取整
public class Main04 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int x = (int) Math.ceil((m / (2 * (1 - Math.pow(0.5, n)))));System.out.println(x);}
}
然后只过了20%,:joy:
估计是浮点数的表示范围有限,在计算时数据有丢失
换策略
用二分查找
1 <= x <= M
x每次取中间值,求出第一天吃的巧克力为当前值是需要的总共巧克力与M比较
import java.util.Scanner;public class Main04_2 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int low = 1;int high = m;while(low < high) {int mid = (low + high + 1) >> 1;// /2int need = sum(n, mid);if(need > m) {high = mid - 1;} else if(need == m) {high = mid;break;} else {low = mid;}}System.out.println(high);}private static int sum(int n, int mid) {int need = 0;for(int i = 0; i < n; i++) {need += mid;mid = (mid + 1) >> 1; //不小于前一天的一半,向上取整}return need;}
}
腾讯2018秋招笔试真题(2)相关推荐
- 腾讯2018秋招笔试真题(1)
腾讯2018秋招笔试真题 小Q的歌单 [题目描述]小 Q 有 X 首长度为 A 的不同的歌和 Y 首长度为 B 的不同的歌,现在小 Q 想用这些歌组成一个 总长度正好为 K 的歌单,每首歌最多只能在歌 ...
- 腾讯2018秋招笔试真题——安排机器
本文参考自腾讯2018秋招笔试真题--安排机器 查看原文: 原文地址 题目描述:小Q的公司最近接到m个任务,第i个任务需要Xi的时间去完成,难度等级为yi. 小Q拥有n ...
- 腾讯2018秋招笔试真题-小Q的歌单
小Q的歌单 [题目描述]小 Q 有 X 首长度为 A 的不同的歌和 Y 首长度为 B 的不同的歌,现在小 Q 想用这些歌组成一个 总长度正好为 K 的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单 ...
- 腾讯2019秋招笔试真题
1.小Q爬塔 描述:小Q正在攀登一座宝塔,这座塔很特别,塔总共有n曾层,但是没两层之间的净高却不相同,所以造成了小Q爬过每层的时间也不同.如果某一层的高度为x,那么爬过这一层锁需的还是件也是x.小Q孩 ...
- 腾讯2019秋招笔试真题 1.小Q爬塔 2.妞妞的问题
1.小Q爬塔 [问题描述]小Q正在攀爬一座宝塔,这座宝塔很特别,塔总共有n层,但是两层之间的净高却不相同,所以造成小Q爬过每层的时间也不同.如果某一次高度为x,那么爬过这一层所需时间也就是x.小Q还会 ...
- 【笔试题】京东2017秋招笔试真题
笔试题 京东2017秋招笔试真题 1.进制均值 时间限制 C/C++语言 1000MS;其他语言 3000MS 内存限制 C/C++语言 65536KB;其他语言 589824KB 题目描述 尽管是一 ...
- 滴滴出行2017秋招笔试真题-编程题汇总_Java实现
滴滴出行2017秋招笔试真题-编程题汇总_Java实现 注:有的题参考别人的思路,用我最容易理解的代码编的程序,所以可以不能最优的解法,后续我会进行更新,只是一个思路,我的笔记而已,所以不喜勿喷~~~ ...
- 2018深信服拼多多秋招笔试真题
网易互娱 处理条件1: 处理5: 处理3,4的同时处理2: 对最后两个字符处理2. 对第3.4个条件的处理: judgeDengcha(int a,b,c){//对第3个条件的处理: if a,b,c ...
- 2018年网易秋招笔试真题——游历魔法王国
链接:https://www.nowcoder.com/questionTerminal/923b9dacf8544e4e83d5e22f5a0e731a 来源:牛客网 魔法王国一共有n个城市,编号为 ...
最新文章
- Kubernetes学习笔记三:Docker安装,Docker使用,编写Dockerfile,制作容器镜像,上传docker镜像
- 漫画:如何给女朋友解释什么是删库跑路?
- 几个常用的Linux监控脚本
- dos下打包整个java工程
- set集合python_python基础-set集合
- 过了一个有意义的愚人节
- day20 java的String
- 请问诸位大神,Android怎么实现图片转动
- 超小股票行情查看软件
- 一篇文章教会你用Python抓取抖音App热点数据
- 【Chrome】浏览器控制台设置成中文
- PostgreSQL 数据库跨版本升级常用方案
- 使用cmd命令远程重启服务器
- 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
- Ireport 导出pdf 特殊字体设置
- 零知识证明学习(一)—— 初始零知识证明
- 如何删掉顽固文件和文件夹
- 大数据时代之市场调研的必要性
- qu32调音台说明书_ALLEN-HEATH QU 系列数字调音台Qu16、Qu24、Qu32功能介绍
- 调用阿里云发送短信验证码的工具类
热门文章
- Java集成融云服务端
- matlab 根轨迹 系统单位阶跃响应,二阶系统单位阶跃响应MATLAB仿真设计.doc
- JAVA编写代码实现如下需求:皮球(Ball)分为足球(Football)和排球(Volleyball),各种皮球的运动(play)方法各不相同。
- 随笔记:实现HTML页面局部滚动及自定义滚动条样式
- 基于Pacemaker+Corosync的PostgreSQL HA故障两例
- html如何设定页面4秒后自动跳转,js定时三秒后自动跳转页面
- 北京交通大学c语言作业,北京交通大学c语言综合程序设计(黄宇班).doc
- Joplin+坚果云同步
- 无干扰网络收音机:Radium for Mac
- FastJson是如何导致App Crash的