拼多多2020秋招【提前批】笔试
第一题:
玩飞行棋,骰子置出多少步,就前进多少步,到终点过了的话,要再回退。给你目前到终点的距离以及N次骰子的置出数字 ,问在第N次骰子之前能不能到终点。
模拟题,很简单,但是有一个小坑,就是N次骰子的第N次要单独考虑,读题需要仔细,写的还算可以。
#include<iostream> using namespace std;int k,n,x,ans=0;int main(){cin>>k>>n;if (k==0) { cout<<"paradox"<<endl; return 0;}bool flag=0;for (int i=1; i<=n-1; i++){cin>>x;if (k>x) k=k-x;else if (k<x) { k=x-k; ans++;}else { flag=1; cout<<"paradox"<<endl; break;}}cin>>x;if (k>x) k=k-x;else if (k<x) { k=x-k; ans++;}else k=0; if (flag==0) cout<<k<<" "<<ans<<endl;
}
第二题:
给你N个骰子,以及他们的上下、前后、左右面的数字,问一共N个骰子分几种?
这个题目的关键就是判断两个骰子是否相同,我感觉应该有固定的解法或者判断方式,
但是我不会,所以写了个有点儿丑的,写的很慢,一个小时多,还好是正确的。
#include<iostream>
#include<algorithm>
using namespace std;int c[720][7];
int b[10],d[10];
int a[1000];
int n,s=0;
int shang,xia,zuo,you,qian,hou;
bool f;bool check(int j){ //判断当前与第j个是否相同 if (c[j][2]!=xia) return false;for (int i=1; i<=4; i++)b[i]=c[j][i+2];if (zuo==b[1]){d[1]=zuo; d[2]=qian; d[3]=you; d[4]=hou;} else if (qian==b[1]){d[1]=qian; d[2]=you; d[3]=hou; d[4]=zuo;} else if (you==b[1]){d[1]=you; d[2]=hou; d[3]=zuo; d[4]=qian;} else if (hou==b[1]){d[1]=hou; d[2]=zuo; d[3]=qian; d[4]=you;}for (int i=1; i<=4; i++){if (b[i]!=d[i]) return false;}return true;
}int main(){cin>>n;for (int i=1; i<=n; i++){cin>>shang>>xia>>zuo>>you>>qian>>hou;//shang=1if (xia==1){swap(shang,xia); swap(zuo,you);}else if (zuo==1){zuo=xia; xia=you; you=shang; shang=1; }else if (you==1){you=xia; xia=zuo; zuo=shang; shang=1;} else if (qian==1){qian=xia; xia=hou; hou=shang; shang=1;}else if (hou==1){hou=xia; xia=qian; qian=shang; shang=1;}//f=0;for (int j=1; j<=s; j++){if (check(j)) { f=1; c[j][0]++; }}if (f==0){s++;c[s][0]=1;c[s][1]=shang;c[s][2]=xia;c[s][3]=zuo;c[s][4]=qian;c[s][5]=you;c[s][6]=hou;} //cout<<shang<<xia<<qian<<you<<hou<<zuo<<endl;}/*for(int i=1; i<=s; i++){for (int j=0; j<=6; j++) cout<<c[i][j]<<" ";cout<<endl;} */for (int i=1; i<=s; i++){a[i]=c[i][0];}sort(a+1,a+s+1);cout<<s<<endl;for (int i=s; i>=1; i--){cout<<a[i]<<" ";}
}
我的解法是:先把目标骰子的一个面定住(比如规定好,上面必须是1这样摆放)。这样的话,如果另外一个骰子上面是1,下面和目标骰子相同,那么这两个骰子只需要再比较另外四个面就可以了,并且如果我们把两个骰子的这四个面都按照有一个方向读书,他们的数列相对顺序应该是一样的。
比如两个给出的两个骰子是:(顺序为上下左右前后面)
骰子1:1 2 3 4 5 6
骰子2:5 6 1 2 3 4
我们把骰子1作为目标,即要求所有的骰子比较时,上面的面一定是1。
所以先把骰子2向右旋转90度,变成1 2 6 5 3 4
这时如果两个骰子的上面是相等的都是1,如果下面不相等,那么一定不相等。
如果下面相等,则看前后左右四面,骰子2按顺时针四面为5 4 6 3(起点随便选)
骰子1也按顺时针四面为3 5 4 6(起点也随意选择)
这时我们发现,只要他们是相对循环相等的,那他们就一定相等。
所以通过一次旋转和一次取周围四面的数字顺序比较,完成对两个骰子相等的判断。
想去网上搜一下标准的解法,找到一个把一个骰子的24种摆放情况都列举出来再判断的方法,要占用额外的空间,而且并不简洁。
我自认为可能这已经是最合适的解法了吧。
第三题:
多多公司每天给员工提供免费的三餐,而小多由于习惯性赖床,所以他从来吃不到早餐。
今天公司提供了N套中餐和M套晚餐,每种套餐分别有一个热量值X和美味值Y。
小多想知道,在满足美味值之和不少于T的情况下,最少可以摄入多少热量值?
注意:
每顿饭最多只能选择一种套餐,小多可以选择只吃一顿饭甚至不吃饭。
输入描述:
第一行三个整数N,M,T,分别表示中餐种数,晚餐种数以及小多需要满足的最少美味值
然后N行第i行两个整数Xi和Yi,表示第i套中餐的热量值和美味值
最后M行第j行两个整数Xj和Yj,表示第j套晚餐的热量值和美味值
输出描述:
一个整数,表示小多在这两顿饭的美味值之和不少于T的前提下,最少摄入的热量值
如果小多两顿饭的美味值之和无论如何都无法达到T,则输出-1
示例1输入输出示例仅供调试,后台判题数据一般不包含示例
输入1
5 1 9
9 1
4 9
3 1
2 3
6 5
9 8
输出1
4
说明1
只吃中午的第2种套餐,不吃晚餐
输入2
1 1 0
3 1
2 1
输出2
0
说明2
选择一顿都不吃
输入3
3 3 10
1 1
2 5
3 7
2 4
4 8
6 9
输出3
5
说明3
选择第3种中餐,和第1种晚餐
输入4
2 1 4
3 1
2 1
1 2
输出4
-1
说明4
无论怎么选,美味值都达不到4,所以输出-1
备注:
对于50%的数据:1 <= N, M, Xi, Yi, Xj, Yj <= 1,000, 0 <= T <= 2,000
对于100%的数据:1 <= N, M, Xi, Yi, Xj, Yj <= 100,000, 0 <= T <= 200,000
简答来说:有N种午饭和M种晚饭,每种饭都有热量值X和美味值Y,并且每顿饭最多吃一种,问在美味值之和不小于T的情况下,最少的热量摄入X。
每顿饭可以选择吃,也可以不吃,吃的话选择哪种?这不是分组背包吗?我不知道我为啥想到了这里,但是背包问题都是有最大容量量以及要去最大值,这个题目求的是保证前提的情况下的最小值,所以神他妈的背包,想的太偏了,要怪只能怪背包没学好,连应用条件都不知道。
解析:
首先应该写一个O(n^2)的暴力,枚举每一种中餐和晚餐的搭配,循环(n+1)*(m+1),可以不选,从中取出满足条件的最小值。
这样可以过50%。
改进1:排序
按x排序的话,那就是碰到符合条件的y就退出,因为x肯定是最小的了。
按y排序的话,那就是碰到不符合条件的y就退出,因为之后的y也一定不满足,答案肯定在当前统计了。
这样好像是可以过65%。
改进2:删除
倒是是按x排序还是y排序?能不能一起排序?开始我纠结了很久,后来发现,
如果饭A的热量值大于B的热量值,并且A的美味值小于B的美味值,那么这个饭A是肯定没有用的,所以我们可以直接不考虑饭A,所以排序完成后,应该是x和y都在递增的情况。
这样就实现了一个x和y的正相关,单调性,所以现在可以使用二分了,对于每个中餐,二分晚餐,复杂度O(nlogn)。
过100%d的数据。
本题参考了博客https://blog.csdn.net/m0_38065572/article/details/107751194
顺便学习了双指针的解法:https://blog.csdn.net/qq_21989927/article/details/111703040
第四题:
有一个6x6的花园,里面分空地和建筑两种,建筑上不能再种地,你有6种作物,需要种到空地上,每个格子种的作物不能和它相邻四周的相同,求有多少种种植方案。
输入:一个6X6的矩阵,有房子的地方标注#,其他地方标注*。
输出:种植方法的数目对10000009的余数。
这应该是个数学题吧,,,
简化问题,假设有4种作物,种在3*3的格子上,没有建筑。
对于第一行第一列(1,1)这个格子,他4种作物随便选,所以是4.
对于第一行第二列(1,2)这个格子,因为他左边的(1,1)已经选了一种,不能选相同的,所以他还剩3种可选。
以此类推。。。。。。
对于(2,2)这个格子,他的左边、上边已经选择好,但是右边和下边目前还是空地,所以不耽误他当前的决策,所以还剩2种可选。
以此类推。。。。。。
得出一个矩阵
4 3 3
3 2 2
3 2 2
矩阵中的数字代表每个格子的可能情况,答案就是这个矩阵乘起来。
不知道这样想对不对,,,,,
所以这个题,先写个会超时的爆搜练练手吧。
#include<iostream> using namespace std;char c[100][100]; //土地初始状态
int a[100][100]; //土地种植情况
int n; //n*n的土地
int m; //m种作物
int ans; //答案统计 void dfs(int x,int y){if (x==n+1){ans++;/*cout<<ans<<endl;for (int i=1; i<=n; i++){for (int j=1; j<=n; j++) cout<<a[i][j]<<" ";cout<<endl; }*/return;}if (c[x][y]=='#'){//如果是建筑,直接看下一块土地 if (y==n) dfs(x+1,1); else dfs(x,y+1); //种植完进行下一步 } else { bool flag=false; //能否找到一种作物种植? for (int i=1; i<=m; i++){if ((a[x-1][y]!=i)&&(a[x][y-1]!=i)) {flag==true; //找到了 a[x][y]=i;if (y==n) dfs(x+1,1); else dfs(x,y+1); //种植完进行下一步 a[x][y]=0;} } }
}int main(){cin>>n>>m;for (int i=1;i<=n; i++)for (int j=1; j<=n; j++)cin>>c[i][j];dfs(1,1);if (ans==0) cout<<-1<<endl;else cout<<ans<<endl;
}
爆搜的好处就是可以验证猜想,把我们猜想的情况输入发现
结果跑出来是9612种,而按照猜想计算是5184,少了很多。
后来想通了,这样不对的原因,因为对于(2,2)这个格子来说,他的左边和上边可能是相同的,所以他是3,也就是说少考虑了很多情况。所以这种想法是错误的。
想不出别的办法了,问了大神,这个题可能有些难,是要用插头DP,同时扔给我一个pdf学习,资源详见:
https://download.csdn.net/download/qq_21989927/12695394
(我没学,太难了。。。)
拼多多2020秋招【提前批】笔试相关推荐
- 拼多多2019秋招内推笔试-业务平台开发
1.复制可乐 题目描述: 自动售货机里有N瓶复制可乐.复制可乐非常神奇,喝了它的人都会复制出一个自己来!现在有Alice,Bob,Cathy,Dave四个人在排第买复制可乐.买完的人会马上喝掉,然后他 ...
- 2020.10拼多多前端秋招面经
2020.10拼多多前端秋招面经 一面 事件循环机制.宏任务.微任务 事件循环机制 Promise有几种状态,状态之间怎么转换的 Promise node有没有了解 文件上传怎么做 Webpack 跨 ...
- 平安银行薪资职级表_秋招提前批!平安银行总行公告发布!薪资拿到手软~
扫码立刻加入银行秋招备考群 后台福利 回复 春招考题 领取 60页历年考题+考情分析回复 易错题 领取 银行考试易错600题回复 20家 领取 20家银行考试试卷回复 入行包 领取 20云南银行13家 ...
- 远景(智能/能源/动力)2023秋招提前批!内推啦
[内推方式]: 点击下面官方网站链接投递: https://app.mokahr.com/recommendation-apply/envisiongroup/43124?recommendCode= ...
- 拼多多2018年秋招提前批
题目一: 喝可乐复制问题 有A.B.C.D四个人排成一队喝可乐,每次喝完复制自己,问数字n的人名? import java.util.*; public class Solution {//获得第N个 ...
- 阿里面试其实也没想象中的那么难,秋招提前批4面拿到21K
前言 大概早上9点左右,收到了阿里面试官小姐姐的电话,声音很好听...跟她约了晚上9点的电话面..然后一整天上班不在状态,开始各种回顾之前准备的知识.为了这次面试大概准备了半个月,利用每天下班到家8点 ...
- [秋招]大疆秋招正式批笔试
8月13日练习往年笔试题 笔试链接中给出了题目类型 8月14日笔试后更新:测试给出的题型不正确,应该是5道单选,5道多选,3道问答题和1道算法编程题 这里给出一个大佬总结的往年题目以及相应的解析,很详 ...
- 2020秋招——XX校招笔试编程题:回文串
回文串判断&打印给定字符串中的所有回文串 笔试时是纸质的,记错了indexOf()函数和charAt()函数,重大失误emmm,这样逻辑虽然都对了还是要gg,ww,反省中... 回文串:aba ...
- 【2021】联易融秋招提前批Java后端面经(已OC)
6.21 一面(2个面试官) 1.自我介绍? 2.设计模式中的六大原则,项目中使用到的设计模式? 3.Spring事务传播机制,隔离级别? 4.A方法有事务,B方法也有事务,A方法中调用B方法过程? ...
最新文章
- 关于struts2如何去掉默认的后缀(.action)
- Axure RP 8.0软件安装教程
- Spark(4)——transformation、action、persist
- vscode编辑器,自己喜欢的颜色
- Build Provider 不得不说的事
- 一次面试引发的思考(中小型网站优化思考) (转)
- Source Generators(源代码生成器)的调试器支持 | Visual Studio 2019(16.10)新功能试用...
- Leaf服务器框架从入门到放弃(一)认识Leaf和安装Leaf环境
- N1CTF 塞题vote分析
- xmlspy php,XMLSpy使用流程 - tnlzz31985的个人空间 - OSCHINA - 中文开源技术交流社区
- 数学建模 TOPSIS法
- i219v微星 驱动_intel英特尔网卡驱动下载-intel英特尔i217/i218/i219系列网卡驱动电脑版 - 极光下载站...
- 交换机,集线器,路由器这三者怎样区分,各自的作用是什么?
- VMware esxi6.7U3B安装镜像集成Realtek8168网卡驱动
- 【日常】CCB网上银行“云宠物”喂食自动化脚本
- java实现http的GET/POST请求封装类-HttpRequest
- java银行项目_javabank项目
- NNI speedup_model()代码笔记
- Software Architecture Pattern(Mark Richards)笔记
- 如何在指板上寻找特殊和弦