poj 3168 计算几何

来源:互联网 发布:富易交易软件 编辑:程序博客网 时间:2024/05/22 17:07
#include<iostream>#include<cstdio>#include<algorithm>#include<vector>using namespace std;#define MAX(x,y) ((x)>(y)?(x):(y))int vis[25010];struct node{int id;int init,min,max;node() {}    node(int a,int b,int c,int d):id(a),init(b),min(c),max(d){}};bool cmp(node a,node b){if(a.init!=b.init)return a.init<b.init;elseif(a.min!=b.min)return a.min<b.min;elsereturn a.max<b.max;}int main(){int n,a,b,c,d,i,res=0,up,right;vector<node>ex,ey;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d%d%d%d",&a,&b,&c,&d);ey.push_back(node(i,b,a,c));        ey.push_back(node(i,d,a,c));          ex.push_back(node(i,a,b,d));ex.push_back(node(i,c,b,d));}int numx=ex.size();int numy=ey.size();sort(ex.begin(),ex.end(),cmp);sort(ey.begin(),ey.end(),cmp);up=ey[0].max;for(i=1;i<numy;i++){if(ey[i].init==ey[i-1].init){if(up>=ey[i].min){vis[ey[i].id]=vis[ey[i-1].id]=1;}}else      up=ey[i].max;up=MAX(up,ey[i].max);}up=ex[0].max;for(i=1;i<numx;i++){if(ex[i].init==ex[i-1].init){if(up>=ex[i].min){vis[ex[i].id]=vis[ex[i-1].id]=1;}}else{up=ex[i].max;}up=MAX(up,ex[i].max);}for(i=0;i<n;i++)if(!vis[i])res++;printf("%d\n",res);return 0;}

0 0
原创粉丝点击