第一题:

玩飞行棋,骰子置出多少步,就前进多少步,到终点过了的话,要再回退。给你目前到终点的距离以及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秋招【提前批】笔试相关推荐

  1. 拼多多2019秋招内推笔试-业务平台开发

    1.复制可乐 题目描述: 自动售货机里有N瓶复制可乐.复制可乐非常神奇,喝了它的人都会复制出一个自己来!现在有Alice,Bob,Cathy,Dave四个人在排第买复制可乐.买完的人会马上喝掉,然后他 ...

  2. 2020.10拼多多前端秋招面经

    2020.10拼多多前端秋招面经 一面 事件循环机制.宏任务.微任务 事件循环机制 Promise有几种状态,状态之间怎么转换的 Promise node有没有了解 文件上传怎么做 Webpack 跨 ...

  3. 平安银行薪资职级表_秋招提前批!平安银行总行公告发布!薪资拿到手软~

    扫码立刻加入银行秋招备考群 后台福利 回复 春招考题 领取 60页历年考题+考情分析回复 易错题 领取 银行考试易错600题回复 20家 领取 20家银行考试试卷回复 入行包 领取 20云南银行13家 ...

  4. 远景(智能/能源/动力)2023秋招提前批!内推啦

    [内推方式]: 点击下面官方网站链接投递: https://app.mokahr.com/recommendation-apply/envisiongroup/43124?recommendCode= ...

  5. 拼多多2018年秋招提前批

    题目一: 喝可乐复制问题 有A.B.C.D四个人排成一队喝可乐,每次喝完复制自己,问数字n的人名? import java.util.*; public class Solution {//获得第N个 ...

  6. 阿里面试其实也没想象中的那么难,秋招提前批4面拿到21K

    前言 大概早上9点左右,收到了阿里面试官小姐姐的电话,声音很好听...跟她约了晚上9点的电话面..然后一整天上班不在状态,开始各种回顾之前准备的知识.为了这次面试大概准备了半个月,利用每天下班到家8点 ...

  7. [秋招]大疆秋招正式批笔试

    8月13日练习往年笔试题 笔试链接中给出了题目类型 8月14日笔试后更新:测试给出的题型不正确,应该是5道单选,5道多选,3道问答题和1道算法编程题 这里给出一个大佬总结的往年题目以及相应的解析,很详 ...

  8. 2020秋招——XX校招笔试编程题:回文串

    回文串判断&打印给定字符串中的所有回文串 笔试时是纸质的,记错了indexOf()函数和charAt()函数,重大失误emmm,这样逻辑虽然都对了还是要gg,ww,反省中... 回文串:aba ...

  9. 【2021】联易融秋招提前批Java后端面经(已OC)

    6.21 一面(2个面试官) 1.自我介绍? 2.设计模式中的六大原则,项目中使用到的设计模式? 3.Spring事务传播机制,隔离级别? 4.A方法有事务,B方法也有事务,A方法中调用B方法过程? ...

最新文章

  1. 关于struts2如何去掉默认的后缀(.action)
  2. Axure RP 8.0软件安装教程
  3. Spark(4)——transformation、action、persist
  4. vscode编辑器,自己喜欢的颜色
  5. Build Provider 不得不说的事
  6. 一次面试引发的思考(中小型网站优化思考) (转)
  7. Source Generators(源代码生成器)的调试器支持 | Visual Studio 2019(16.10)新功能试用...
  8. Leaf服务器框架从入门到放弃(一)认识Leaf和安装Leaf环境
  9. N1CTF 塞题vote分析
  10. xmlspy php,XMLSpy使用流程 - tnlzz31985的个人空间 - OSCHINA - 中文开源技术交流社区
  11. 数学建模 TOPSIS法
  12. i219v微星 驱动_intel英特尔网卡驱动下载-intel英特尔i217/i218/i219系列网卡驱动电脑版 - 极光下载站...
  13. 交换机,集线器,路由器这三者怎样区分,各自的作用是什么?
  14. VMware esxi6.7U3B安装镜像集成Realtek8168网卡驱动
  15. 【日常】CCB网上银行“云宠物”喂食自动化脚本
  16. java实现http的GET/POST请求封装类-HttpRequest
  17. java银行项目_javabank项目
  18. NNI speedup_model()代码笔记
  19. Software Architecture Pattern(Mark Richards)笔记
  20. 如何在指板上寻找特殊和弦

热门文章

  1. VMware中NET模式无法获取IP地址
  2. 51、截止时间调度概述
  3. JAVA培训哪里好?
  4. html px2rem转化器,【技术】移动端适配 px2rem/px2vw 的原理与实现
  5. 好酒和那些廉价酒比贵在哪里
  6. 计算机专业毕业英文论文一万字,计算机专业毕业论文外文翻译2篇共15页.DOC
  7. 华南理工深度学习与神经网络期末考试_深度学习算法地图
  8. 你了解ABBYY FineReader 14么?
  9. Java程序员秋招三面蚂蚁金服,我总结了所有面试题,也不过如此
  10. C语言——codeforces746B