Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:为什么用宏定义判断最大最小值 会出错呢?In Reply To:为什么用宏定义判断最大最小值 会出错呢? Posted by:Cunch at 2010-10-21 22:53:11 > > > #include<cstdio> > #include<cstring> > #include<algorithm> > using namespace std; > > > int min(int x, int y){ > return x>y ? y : x; > } > > int max(int x, int y){ > return x>y ? x : y; > } > > > //为什么用下面这个宏定义就错了呢???????? > #define mmax(x,y) x>y ? x : y > #define mmin(x,y) x<y ? x : y > > struct P{ > int x,y; > P(const int _x, const int _y) > :x(_x),y(_y) {} > P(){} > const P& input(){ > scanf("%d %d",&x,&y); > return *this; > } > const P& output() const{ > printf("%d %d\n",x,y); > return *this; > } > }; > > int cross(const P &p1, const P &p2, const P &p3){ > return (p3.x - p1.x)*(p2.y - p1.y) - (p3.y - p1.y)*(p2.x - p1.x); > } > > bool online(const P &p1, const P &p2, const P &p3, int flag =0){ > > if(min(p1.x, p2.x) <= p3.x && p3.x <= max(p1.x, p2.x) && min(p1.y, p2.y) <= p3.y && p3.y <= max(p1.y, p2.y)){ > // printf("%d %d %d\n",min(p1.x, p2.x),max(p1.x, p2.x),p3.x); > // printf("%d %d %d\n",min(p1.y, p2.y),max(p1.y, p2.y),p3.y); > return true; > } > /* > if(mmin(p1.x, p2.x) <= p3.x && p3.x <= mmax(p1.x, p2.x) && mmin(p1.y, p2.y) <= p3.y && p3.y <= mmax(p1.y, p2.y)){ > // printf("%d %d %d\n",min(p1.x, p2.x),max(p1.x, p2.x),p3.x); > // printf("%d %d %d\n",min(p1.y, p2.y),max(p1.y, p2.y),p3.y); > return true; > }*/ > return false; > } > > bool lineInsect(const P &p1, const P &p2, const P &p3, const P &p4){ > int d1 = cross(p1, p2, p3); > int d2 = cross(p1, p2, p4); > int d3 = cross(p3, p4, p1); > int d4 = cross(p3, p4, p2); > > if(d1*d2 < 0 && d3*d4<0) return true; > else if(d1 ==0 && online(p1, p2, p3)) return true; > else if(d2 ==0 && online(p1, p2, p4)) return true; > else if(d3 ==0 && online(p3, p4, p1)) return true; > else if(d4 ==0 && online(p3, p4, p2)) return true; > return false; > } > > int main(){ > P a,b,r1,r2,r3,r4; > int tt; > //freopen("in.txt","r",stdin); > //freopen("out2.txt","w",stdout); > scanf("%d",&tt); > while(tt--){ > scanf("%d%d",&a.x,&a.y); > scanf("%d%d",&b.x,&b.y); > scanf("%d%d",&r1.x,&r1.y); > scanf("%d%d",&r3.x,&r3.y); > > P tp; > if(r1.x > r3.x){ > tp = r1; > r1 = r3; > r3 = tp; > } > > r2 = P(r3.x, r1.y); > r4 = P(r1.x, r3.y); > > // r1.output(); > // r2.output(); > // r3.output(); > // r4.output(); > > bool isInsect = false; > if(lineInsect(a,b,r1,r2)) { > isInsect = true; > } > if(!isInsect && lineInsect(a,b,r2,r3)){ > isInsect = true; > } > if(!isInsect && lineInsect(a,b,r3,r4)){ > isInsect = true; > } > if(!isInsect && lineInsect(a,b,r4,r1)){ > isInsect = true; > } > > > P tp1, tp2; > tp1.x = min(r1.x,r3.x); > tp1.y = max(r1.y,r3.y); > > tp2.x = max(r1.x,r3.x); > tp2.y = min(r1.y,r3.y); > > //printf("%d %d %d %d %d %d\n",r1.x,r1.y,r3.x,r3.y,a.x,a.y); > if(tp1.x <= a.x && a.x <= tp2.x && tp2.y <= a.y && a.y <= tp1.y){ > isInsect = true; > } > > if(isInsect) printf("T\n"); > else printf("F\n"); > } > return 0; > } > > > Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator