美团笔试4.9(菜鸡求助)
太惨了……一共五道题,后面三道题看都没看,一直在死磕第二题,因为感觉挺有可能做出来啊(可能本菜鸡把问题想的过于简单了?)然而一直0通过……最后只ac了第一道题😓凉凉凉凉凉凉……
有咩有大佬帮俺瞅瞅第二题代码呀,就是运动员赛跑问要发多少个奖牌那道题(可能错的很离谱,莫要笑俺😂 俺死磕了一个多小时觉得挺对的啊……vs2017上甚至输入都有问题……俺太菜了不知道因为啥……
题目大概是这样的,第一行有一个数组,代表运动员们的出发顺序(运动员用数字编号,如 [5,2,6,1,4,3] 代表5号第一个出发,2号第二个出发,6号第三个出发……),第二个有一个数组,代表运动员们的到达顺序。如果A运动员比B运动员先到达,且B是比A先出发的,那么给A颁发奖牌(B可以是比A先出发的任何一个运动员),计算并输出一共要颁发多少奖牌。
有咩有大佬帮俺瞅瞅错哪里了😥或者有什么好的思路或者通过了的代码给俺瞅瞅 感谢感谢感谢!(俺可能把问题想的过于简单了可能错的很离谱吧……
#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;
long n;
vector<long> a;
vector<long> b;
unordered_map<long, long> umap;
bool find(long i) {
int tmp1 = umap[b[i]];
for (int k = tmp1 - 1; k > 0; k--) {
if (umap[b[k]] > i)
return true;
}
return false;
}
int main() {
a.clear();
b.clear();
long temp;
cout << 5;
for (int i = 0; i < n; i++) {
cin >> temp;
a.push_back(temp);
}
for (int i = 0; i < n; i++) {
cin >> temp;
b.push_back(temp);
}
long ans = 0;
for (int i = 0; i < n; i++) {
umap[a[i]] = i;
}
for (int i = 0; i < n; i++) {
if (find(i)) ans += 1;
}
cout << ans;
return 0;
}