美团点评2019年秋招部分编程题汇总 企业独家授权

2020.8.7
Apare_xzc


网页链接:美团点评2019年秋招部分编程题汇总


1/7 [编程题] 图的遍历

给定一张包含N个点、N-1条边的无向连通图,节点从1到N编号,每条边的长度均为1。假设你从1号节点出发并打算遍历所有节点,那么总路程至少是多少?

分析:总边长的2倍减去根结点到某个叶子结点的最长路就是答案。dfs

#include <bits/stdc++.h>
using namespace std;
const int N = 100000+10;
vector<int> edge[N];
int maxx;
void dfs(int x,int sum,int fa) {int len = edge[x].size();if(len==1&&edge[x][0]==fa) {maxx = max(maxx,sum);return;}for(int i=0;i<len;++i) {int to = edge[x][i];if(to!=fa) dfs(to,sum+1,x); }
}
int main(void) {int n;cin>>n;int u,v;for(int i=1;i<n;++i) {scanf("%d%d",&u,&v);edge[u].push_back(v);edge[v].push_back(u);} int ans = n*2-2;dfs(1,0,0);ans -= maxx;cout<<ans<<endl;return 0;
}

2/7 [编程题] 最长全1串

给你一个01字符串,定义答案=该串中最长的连续1的长度,现在你有至多K次机会,每次机会可以将串中的某个0改成1,现在问最大的可能答案

分析:乍一看是二分答案,想一想直接尺取即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 3e5+100;
int a[N],n,k;
//bool check(int mid) {//  int left =
//}
int main(void) {scanf("%d%d",&n,&k);for(int i=1;i<=n;++i)scanf("%d",a+i);int left=1,right=1;int ans = 0;int cnt0 = 0;while(right<=n) {if(a[right]==0) ++cnt0;right++;while(cnt0>k) {if(a[left]==0) --cnt0;++left;}ans = max(ans,right-left);} cout<<ans<<endl;//  int left = 0,right = n+1,mid;
//  while(right-left>1) { //[)
//      mid = (left+right)>>1;
//      if(check(mid)) left = mid;
//      else right = mid;
//  } return 0;
}

3/7 [编程题] 外卖满减

你打开了美了么外卖,选择了一家店,你手里有一张满X元减10元的券,店里总共有n种菜,第i种菜一份需要A_i元,因为你不想吃太多份同一种菜,所以每种菜你最多只能点一份,现在问你最少需要选择多少元的商品才能使用这张券。

分析:01背包。

dp[i][j]代表前i个恰好凑够j元需要的最少钱数。
发现如果能凑够,那么dp[i][j]就是j,我们不用管,因为有的钱我们凑不出来。
因为是下好凑出来,所以没物品时
最后找dp[n][x]到dp[n][sum]这个区间能凑出来的最小值即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 103;
int a[N];
int dp[10000+100];
int main(void) {int n,cap;scanf("%d%d",&n,&cap);int sum = 0;for(int i=1;i<=n;++i) scanf("%d",a+i),sum+=a[i];memset(dp,0x3f,sizeof(dp));dp[0] = 0;for(int i=1;i<=n;++i) {for(int j=sum;j>=a[i];--j)dp[j] = min(dp[j],dp[j-a[i]]+a[i]);}int res = dp[cap];for(int i=cap+1;i<=sum;++i)res = min(res,dp[i]);cout<<res<<endl;return 0;
}

4/7 [编程题]种花

公园里有N个花园,初始时每个花园里都没有种花,园丁将花园从1到N编号并计划在编号为i的花园里恰好种A_i朵花,他每天会选择一个区间[L,R](1≤L≤R≤N)并在编号为L到R的花园里各种一朵花,那么园丁至少要花多少天才能完成计划?

分析

如果按题意模拟,找到区间最小值,区间都减去这个最小值,然后分成若干段,分段向下递归,这样复杂度过高。
给出一种贪心的伪代码:

ans = 0
for(int i=2;i<=n;++i)ans += max(0,a[i-1]-a[i])
ans += a[n]
return ans
#include <bits/stdc++.h>
using namespace std;
const int N = 100000+10;
int a[N];
int main(void) {int n;cin>>n;for(int i=1;i<=n;++i)scanf("%d",a+i);int ans = 0;for(int i=2;i<=n;++i)ans += max(0,a[i-1]-a[i]);ans += a[n];cout<<ans<<endl;return 0;
}

5/7 [编程题] 考试策略

小明同学在参加一场考试,考试时间2个小时。试卷上一共有n道题目,小明要在规定时间内,完成一定数量的题目。 考试中不限制试题作答顺序,对于 i 第道题目,小明有三种不同的策略可以选择: (1)直接跳过这道题目,不花费时间,本题得0分。

(2)只做一部分题目,花费pi分钟的时间,本题可以得到ai分。 (3)做完整个题目,花费qi分钟的时间,本题可以得到bi分。


分析: 01背包

#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int p[N],a[N],q[N],b[N];
int dp[N][130];
int main(void) {int n;cin>>n;for(int i=1;i<=n;++i)scanf("%d%d%d%d",p+i,a+i,q+i,b+i);for(int i=1;i<=n;++i) {for(int j=1;j<=120;++j) {dp[i][j] = dp[i-1][j];//这道题没做if(j>=p[i]) dp[i][j] = max(dp[i][j],dp[i-1][j-p[i]]+a[i]);if(j>=q[i]) dp[i][j] = max(dp[i][j],dp[i-1][j-q[i]]+b[i]);}}cout<<dp[n][120]<<endl;return 0;
}

6/7 [编程题] 路由器

一条直线上等距离放置了n台路由器。路由器自左向右从1到n编号。第i台路由器到第j台路由器的距离为| i-j |。 每台路由器都有自己的信号强度,第i台路由器的信号强度为ai。所有与第i台路由器距离不超过ai的路由器可以收到第i台路由器的信号(注意,每台路由器都能收到自己的信号)。问一共有多少台路由器可以收到至少k台不同路由器的信号。

分析:差分解决多次区间更新

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+100;
typedef long long LL;
LL a[N],b[N]; //a[]差分数组
void add(int L,int R,LL add) {a[L]+=add;a[R+1]-=add;
}
int main(void) {int n,k,x;cin>>n>>k;for(int i=1;i<=n;++i) {scanf("%d",&x);int left = i-x;int right = i+x;add(max(1,left),min(right,n),1);}int ans = 0;for(int i=1;i<=n;++i) {b[i] = b[i-1]+a[i];if(b[i]>=k) ++ans; }    cout<<ans<<endl;return 0;
}

第7题没写…


2020.8.7 22:35

美团点评2019年秋招部分编程题汇总 解题报告 Apare_xzc相关推荐

  1. 招商银行信用卡中心2018秋招部分编程题汇总

    1.给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的. 例如,"abcabcabc"满足条件,因为它是由"abc"首尾拼接而成的, ...

  2. 美团点评2017秋招笔试编程题

    美团点评2017秋招笔试编程题 1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是 ...

  3. 【新华三】H3C 秋招 笔试编程题

    点击上方蓝字关注我,我们一起学编程 欢迎小伙伴们分享.转载.私信.赞赏. H3C 笔试编程题. 微信搜索:编程笔记本 微信搜索:编程笔记本 微信搜索:编程笔记本 1. 星期匹配 题目描述: 输入一个字 ...

  4. 2019度小满秋招研发编程题_数字的情绪

    每个整数都希望可以整除很多数字,特别是它自身包含的数字,我们将整数分为三类: 1. 数字可以整除它包含的一部分数字,比如72,由,7和2两种数字组成,72可以整除2,我们称这个数字是开心的,用&quo ...

  5. 腾讯2017秋招笔试编程题--游戏任务标记

    游戏里面有很多各式各样的任务,其中有一种任务玩家只能做一次,这类任务一共有1024个,任务ID范围[1,1024].请用32个unsigned int类型来记录着1024个任务是否已经完成.初始状态都 ...

  6. Java——快手2020校园招聘秋招笔试--[编程题]运动会

    题目: 一年一度的快手运动会又要开始了,同学们终于有一天可以离开鼠标键盘显示器,全身心的投入到各种体育项目中.UED设计师小红虽然没有参加体育项目,但她的责任重大,因为她是拉拉队的队长,她需要在每个项 ...

  7. Java——快手2020校园招聘秋招笔试[编程题]质因数统计

    题目: 我们知道每一个大于1的整数都一定是质数或者可以用质数的乘积来表示,如10=2*5.现在请设计一个程序,对于给定的一个(1,N] 之间的正整数(N取值不超过10万),你需要统计(1,N] 之间所 ...

  8. 涂鸦智能2021秋招笔试编程题

    2道题,60分钟,比较简单 1.给一串包含字母和数字的字符串,从中找到第二大的数字,如果没有第二大的数字,则返回-1 public static int secondHighest (String s ...

  9. 快手2020校园招聘秋招笔试--算法C试卷 练习 解题报告 Apare_xzc

    快手2020校园招聘秋招笔试–算法C试卷 解题报告 Apare_xzc 2020/4/10 网页链接:牛客链接 题型分布: 选择题(2分/道*20道)         编程题(15分/道*4道) 选择 ...

最新文章

  1. php和python web开发-初入Web开发,php、python和ruby应该学哪个?
  2. conda下载出现连接超时怎么办
  3. MVC ---- EF的延迟加载
  4. 用 PHP 读取 XML
  5. jQuery lazyload 懒加载
  6. QML和C++混合编程--(一)
  7. file_get_contents遍历api数据
  8. 小蚂蚁学习Redis笔记(13)——Redis之phpredis的安装
  9. 计算机病毒小学教师资格证面试,小学信息技术人教版四年级上册第15课《病毒防治及时做》优质课公开课教案教师资格证面试试讲教案...
  10. 关于Java中“+”加运算符和“”向前移位运算符混合使用时出现的错误
  11. DataSet运用DES加解密到Xml
  12. zookeeper3.4.5集群安装
  13. 【单目标优化求解】基于matlab海洋捕食者算法(MPA)求解单目标问题【含Matlab源码 478期】
  14. Swift 5.0的新特性
  15. 使用Tensorflow Lite在Android上进行AI危害检测
  16. 找不到设备 将计算机连接到USB打印机,打印机连接电脑没反应怎么办
  17. 倍数(Python)
  18. 互联网晚报|12/27星期二| ​​国家卫健委:取消入境后全员核酸检测和集中隔离;新冠肺炎更名为新冠感染;知网回应被罚8760万...
  19. 数据存储计量单位换算
  20. C++程序设计(第四版)例题11.8

热门文章

  1. HEVC标准参考软件HM下载
  2. win7系统怎么关闭讲述人功能?
  3. 计算机网络知识与技巧概括
  4. 【SRE笔记 2022.9.7 linux进程相关命令及源码包安装】
  5. Python学习笔记(9)采集图片网址并下载图片——以途牛旅游网为例
  6. Android关于包体不符合谷歌play关于提供64位版本应用的规定
  7. Linux 的 rz 和 sz 命令
  8. 基于51单片机的人脸识别电子密码锁
  9. 股权众筹平台如何服务于中小企业?
  10. linux pcm接口调试,Linux的alsa接口播放pcm音频数据