美团笔试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; }