阿里笔试4.10(菜鸡求助)
哦豁,完蛋!本菜鸡发誓等考完语言一定好好学习敲代码!
第一题挺简单的,题目大概是这样的:给你一堆点的坐标,让你求一个值,这个值到所有点的横坐标距离之和最短。俺搅得好像要用二分法找吧,不然步长为1那么找会超时(过0.3),俺不太会写二分法(没错这么基本的东西竟然都写不出来)……就编了四十多分钟也没编出来(但感觉大概差不多了吧,没时间提交了)
第二题看都没看因为俺知道俺大概是做不出来的……
附第一题超时的代码,只过了0.3,欢迎大佬们在评论区贴代码给俺摩拜一下下🤗
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main() {
long n;
cin >> n;
vector<vector<long>> v(n, vector<long>(2));
for (int i = 0; i < n; i++) {
cin >> v[i][0] >> v[i][1];
}
long xmax = 0, xmin = 100000;
for (int i = 0; i < n; i++) {
if (v[i][0] < xmin)
xmin = v[i][0];
}
for (int i = 0; i < n; i++) {
if (v[i][0] > xmax)
xmax = v[i][0];
}
long x, sum, ans;
for (int x = xmin; x <= xmax; x++) {
sum = 0;
for (int i = 0; i < n; i++) {
sum += abs(v[i][0] - x);
}
if (x == xmin) ans = sum;
else {
if (ans > sum) ans = sum;
}
}
cout << ans;
return 0;
} 