码迷,mamicode.com
首页 > 编程语言 > 详细

ZOJ 3041 City Selection(好排序)

时间:2015-02-06 09:41:15      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:zoj   排序   

题目链接:ZOJ 3041 City Selection

题意:有N个城市坐标和M个工厂坐标,在以工厂为原点的第四象限的点都会受到污染。即图中画线区域

技术分享


思路:把工厂和城市的坐标一起排序,再比较y坐标。


AC代码:


#include <stdio.h>
#include <algorithm>
#include <set>
using namespace std;
const int maxn=200010;

struct node{
	int x,y;
	int flag;
};
struct node p[maxn*2],tmp,ans[maxn];

bool cmp1(node a,node b){
	if(a.x!=b.x)
		return a.x<b.x;
	if(a.y!=b.y)
		return a.y>b.y;
	return a.flag<b.flag;
}

bool cmp2(node a,node b){
	if(a.x!=b.x)
		return a.x<b.x;
	if(a.y!=b.y)
		return a.y<b.y;
}

int main()
{
	int n,m,i,j,count;
	while(scanf("%d%d",&n,&m)!=EOF){
		int cnt=0;
		for(i=0;i<n;i++){
			scanf("%d%d",&tmp.x,&tmp.y);
			tmp.flag=1;
			p[cnt++]=tmp;
		}
		for(i=0;i<m;i++){
			scanf("%d%d",&tmp.x,&tmp.y);
			tmp.flag=0;
			p[cnt++]=tmp;
		}
		sort(p,p+cnt,cmp1);
		tmp.x=-1000000010;
		tmp.y=-1000000010;
		count=0;
		for(i=0;i<cnt;i++){
			if(p[i].flag==0 && p[i].y>=tmp.y)
				tmp.y=p[i].y;
			if(p[i].flag==1 && p[i].y>tmp.y)
				ans[count++]=p[i];
		}
		sort(ans,ans+count,cmp2);
		printf("%d\n",count);
		for(i=0;i<count;i++){
			printf("%d %d\n",ans[i].x,ans[i].y);
		}
	}
	return 0;
}
/*
7 3
-3 3
0 1
-2 2
1 3
4 2
3 4
5 5

-2 2
2 0
4 4

5 3
0 1
-2 2
1 4
1 3
4 4

-2 2
2 0
4 3

1 1
0 0
-1 0
*/



ZOJ 3041 City Selection(好排序)

标签:zoj   排序   

原文地址:http://blog.csdn.net/u012377575/article/details/43531479

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!