阿里笔试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;
}


#阿里笔试##阿里巴巴##笔试题目#
全部评论
从左向右求一遍前缀和,从右向左求一遍后缀和,两个相加,最大值索引就是答案吧。
2 回复 分享
发布于 2020-04-10 10:20
第一题就是寻找一点使该点到所有点距离之和最小,那就排序之后选点列中间一点或中间两点连线上一点即可,但我都不知道哪里错了一直0AC....???这题就是已知数轴上一系列点。第二题显然双色最难,那就某种颜色数量不超过n//2即可,我还是0AC人都傻了....???
2 回复 分享
发布于 2020-04-10 11:15
第二题用常规的dfs搜索就能解决...可以看下这个视频,https://www.bilibili.com/video/BV1Hb411U7E9/
1 回复 分享
发布于 2020-04-10 10:23
第一个贪心取中位数就可以了,具体证明可以自己画一下
1 回复 分享
发布于 2020-04-10 11:14
第一题用这个代码可以骗60%的分数... ```cpp #include <iostream> #include <cmath> using namespace std; const int MAXN = 100000 + 5; const int INF = 1e9; int x[MAXN], y[MAXN]; int N; int calDist(int xx) { int totalDist = 0; for (int i = 0; i < N; i++) { totalDist += abs(x[i] - xx); } return totalDist; } int main() { scanf("%d", &N); int sumX = 0; int minX = INF, maxX = -INF; for (int i = 0; i < N; i++) { int temp; scanf("%d%d", &x[i], &temp); if (minX > x[i]) minX = x[i]; if (maxX < x[i]) maxX = x[i]; } int ans = INF; for (int i = minX; i <= maxX; i++) { int temp = calDist(i); if (temp < ans) ans = temp; } printf("%d\n", ans); return 0; } ```
点赞 回复 分享
发布于 2020-04-10 10:20
应该先做第二题的,第二题比较简单
点赞 回复 分享
发布于 2020-04-10 10:22
额 我第二题直接判断了,如果有一种颜色大于格子数的一半,那就必然不可能成功,否则都能成功
点赞 回复 分享
发布于 2020-04-10 10:23
可以知道答案应该是一个先减后增的一个离散序列,要求的是最低点的峰值,因此可以用三分法。
点赞 回复 分享
发布于 2020-04-10 10:24
其实水渠就在x中间两个点的正中间,然后我以为不会这么简单就没写....我同学这么过了
点赞 回复 分享
发布于 2020-04-10 10:32
&感叹一下大家都好机智啊!来自底层的仰望
点赞 回复 分享
发布于 2020-04-10 10:52
难死我了😤
点赞 回复 分享
发布于 2020-04-10 14:09

相关推荐

01-26 18:45
门头沟学院 Java
一天代码十万三:哥们实习再包一下吧,产出太笼统了,尽量体现业务
点赞 评论 收藏
分享
01-14 12:08
门头沟学院 Java
神哥了不得:(非引流)1.既然发出来了简历,就稍微提一点点小建议,确实简历很不错了,练手项目可以换一些质量高的,工作内容,可以加上一些量化指标,比如第一条系统响应速度由多少变成多少,减少了百分之多少,第4条就很不错。2.广投,年前实习招募比较少了
点赞 评论 收藏
分享
评论
2
10
分享

创作者周榜

更多
牛客网
牛客企业服务