今日头条(后台开发)笔试题--在点集P中找满足条件的子集x

/*
 * 我的想法:先找到P中横坐标最大的点A(Xmax,Ya),以及纵坐标最大点B(Xb,Ymax),可知满足x定义的点必定在以AB为对角线的矩形范围内。
 * 由于笔试OJ实在太卡,最后提交时都不知道通过率是多少,也不知道这种接法对不对?
 */
#include <cstdio>
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;

struct Point
{
	unsigned int x;
	unsigned int y;
};

bool compare(Point A, Point B)
{
	return A.x < B.x ? true : false;
}

int main()
{
	int N;
	vector<Point> pset;
	vector<Point> ans;
	while (cin >> N)
	{
		pset.clear();
		ans.clear();
		for (int i = 0; i < N; ++i)
		{
			Point pt;
			cin >> pt.x;
			cin >> pt.y;
			pset.push_back(pt);
		}
		//寻找x最大点,y最大点
		Point xmax = { 0,0 }, ymax = {0,0};
		for (int i = 0; i < N; i++)
		{
			if (xmax.x < pset[i].x)
				xmax = pset[i];
			if (ymax.y < pset[i].y)
				ymax = pset[i];
		}
		for (int i = 0; i < N; i++)
		{
			if ((pset[i].x >= ymax.x) && (pset[i].y >= xmax.y))
				ans.push_back(pset[i]);
		}
		sort(ans.begin(), ans.end(), compare);
		for (int i = 0; i < ans.size(); i++)
		{
			cout << ans[i].x << " " << ans[i].y << endl;
		}
	}
}

全部评论
百分之50 的路过。。。。
点赞 回复 分享
发布于 2017-08-22 21:33
咱俩的思路差不多,但是接下来的处理不一样,我是这样整的,找到横坐标最大值对应的点和纵坐标最大值对应的点,两个点确定一条直线,集合中的点在直线上或者上方都是满足要求的,结果排序处理,自己抽自己一巴掌,妈的很早思路就想出来了,到最后才看到结果按横坐标排序。再抽一下。。。。。。
点赞 回复 分享
发布于 2017-08-22 21:49
同,,,写着写着,内存就爆了,还以为电脑出问题了
点赞 回复 分享
发布于 2017-08-22 21:31
同学你好!首先感谢你参加今日头条笔试,如果在笔试过程中遇到任何问题,可以通过申诉通道与我们联系。情况核对属实后,可以有二次笔试的机会,成绩以最后一次考试为准。【申诉通道】campushr@bytedance.com,请在正文简要说明笔试遇到的问题,邮件标题为: 笔试申诉+岗位+姓名+***话,我们会尽快回复~
点赞 回复 分享
发布于 2017-08-22 21:30

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务