头条第四题

第三题这种题我一看就不做了,太浪费时间
直接去看第四题了
题不难
对于集合A和B
先算均值
然后肯定是均值大的集合取出来扔到另一个 假设大的集合是A
然后用lowerbound就能找到A中所有比自己均值小的元素
然后遍历这些元素,看是否比B的均值大,只要大就能扔过去 magic++就行
然后更新均值 继续循环。

全部评论
这样暴力做后面的样例会超时
点赞
送花
回复
分享
发布于 2018-03-24 21:17
//大佬是这么写的,为啥一直0%,自己测试用例和想的用例都能过 #include <iostream> #include<algorithm> #include<vector> #include<math.h> using namespace std; int main() {     int n, m, temp;     cin >> n >> m;     vector<int> vea, veb, vetemp;     int total_a = 0, total_b = 0;     for (int i = 0; i<n; i++) {         cin >> temp;         vea.push_back(temp);         total_a += temp;     }     for (int i = 0; i<m; i++) {         cin >> temp;         veb.push_back(temp);         total_b += temp;     }     int res = 0;     double avg_a = (double)total_a / n, avg_b = (double)total_b / m;     if (avg_a>avg_b) {         vetemp = vea; vea = veb; veb = vetemp;         temp = n; n = m; m = temp;         temp = total_a; total_a = total_b; total_b = temp;     }     sort(veb.begin(), veb.end());     while (1) {         if (m == 1) break;         avg_a = (double)total_a / n;         avg_b = (double)total_b / m;         if (avg_a >= avg_b) break;         int tip1 = lower_bound(veb.begin(), veb.end(), avg_a) - veb.begin();         int tip2 = lower_bound(veb.begin(), veb.end(), avg_b) - veb.begin();         if (tip1<tip2) {             res++;             total_a += veb[tip1];             total_b -= veb[tip1];             n++;             m--;             veb.erase(veb.begin() + tip1);         }         else break;     }     cout << res << endl;     system("pause");     return 0; }
点赞
送花
回复
分享
发布于 2018-03-24 21:32
滴滴
校招火热招聘中
官网直投
去掉比平均值大的数,不可能使得平均值变大 加入比平均值大的数才能使得平均值更大
点赞
送花
回复
分享
发布于 2018-03-24 21:34
我就这么做的 然而超时了
点赞
送花
回复
分享
发布于 2018-03-24 21:39

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务