ZOJ 3041 City Selection(好排序)

题目链接: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 30 1-2 21 34 23 45 5-2 22 04 45 30 1-2 21 41 34 4-2 22 04 31 10 0-1 0*/

积极的人在每一次忧患中都看到一个机会,

ZOJ 3041 City Selection(好排序)

相关文章:

你感兴趣的文章:

标签云: