题意:有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 */
原文:http://blog.csdn.net/u012377575/article/details/43531479