美团笔试全是大题,还是比较适合我的,一共五题。
第一题
题意
给你一个日期包星期几以及时和分,然后一个时间n,问n分钟之前是星期几和几时几分。
分析
暴力一点,数据也不大,先算出当前的总分钟,然后减去n,不断+1440直到为正。注意一下格式,输出的时候要补0。
代码
#include <cstdio>
#include <iostream>
using namespace std;
int x, h, m, n, t;
int main() {
scanf("%d",&x);
scanf("%d:%d",&h,&m);
scanf("%d",&n);
t=h*60+m;
t-=n;
while (t<0) {
t+=1440;
x--; if (x==0) x=7;
}
printf("%d\n",x);
h=t/60; m=t%60;
if (h<10) printf("0%d:",h);
else printf("%d:",h);
if (m<10) printf("0%d\n",m);
else printf("%d\n",m);
return 0;
}
第二题
题意
有1e5个人跑步,给一个数组a,a[i]表示第i个出发的人是谁,数组b,b[i]表示第i个到达的人是谁。求超过别人的人有多少?
分析
这个题的数据我严重怀疑是假的,一开始想了一会,没啥太多想法,然后准备暴力做一下,O(n^2)复杂度,没想到直接过了,很奇怪。
用一个map记录编号为i的人出发的次序,用另一个map记录编号为i的人到达的次序。两重循环,判断第i个人有没有超过别人,遍历j个人,如果第i个人开始比j晚,结束比j早那么就超过了别人,答案+1。
#include <cstdio>
#include <iostream>
#include <map>
using nam