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 |
大家说的左上右下的坑我跳过去了,但是。。。竟然是线段。。。我当直线做了。。。嚷肮一次 #include <iostream> #include <stdio.h> using namespace std; void jh(int &x, int &y){ int tmp = x; x = y; y = tmp; } struct pt{ int x,y; pt(int x, int y): x(x), y(y){} }; struct rctg{ int xl, xr, yb, yt; rctg(int l, int r, int b, int t){ if(l>r) jh(l,r); if(b>t) jh(b,t); xl = l, xr = r, yb = b, yt = t; } }; bool inside(pt &p, rctg &r){ return p.x >= r.xl && p.x <= r.xr && p.y >= r.yb && p.y <= r.yt; } pt *qdp, *zdp; rctg *rp; int t; char answers[4] = "FT"; void initT(){ scanf("%d", &t); } bool initC(){ if(!t) return 0; t--; int xstart, ystart, xend, yend, xleft, ytop, xright, ybottom; scanf("%d%d%d%d%d%d%d%d", &xstart, &ystart, &xend, ¥d, &xleft, &ytop, &xright, &ybottom); if(xstart > xend || (xstart == xend && ystart > yend)){ jh(xstart, xend); jh(ystart, yend); } qdp = new pt(xstart, ystart); zdp = new pt(xend, yend); rp = new rctg(xleft, xright, ybottom, ytop); return 1; } bool getAns(){ if(inside(*qdp, *rp) || inside(*zdp, *rp)) return 1; if(qdp->x == zdp->x){ return qdp->x >= rp->xl && qdp->x <= rp->xr && zdp->y >= rp->yb && rp->yt >= qdp->y; } if(qdp->y == zdp->y){ return qdp->y >= rp->yb && qdp->y <= rp->yt && zdp->x >= rp->xl && rp->xr >= qdp->x; } double k = (zdp->y - qdp->y) * 1.0 / (zdp->x - qdp->x); double y1 = k * (rp->xl - qdp->x) + qdp->y, y2 = k * (rp->xr - qdp->x) + qdp->y; double x1 = (1/k) * (rp->yb - qdp->y) + qdp->x, x2 = (1/k) * (rp->yt - qdp->y) + qdp->x; return (x1 >= rp->xl && x1 <= rp->xr && x1 >= qdp->x && x1 <= zdp->x) || (x2 >= rp->xl && x2 <= rp->xr && x2 >= qdp->x && x2 <= zdp->x) || (y1 >= rp->yb && y1 <= rp->yt && ((y1 >= qdp->y && y1 <= zdp->y) || (y1 >= zdp->y && y1 <= qdp->y))) || (y2 >= rp->yb && y2 <= rp->yt && ((y2 >= qdp->y && y2 <= zdp->y) || (y2 >= zdp->y && y2 <= qdp->y))); } void ghq(){ delete qdp; delete zdp; delete rp; } int main() { initT(); while(initC()){ printf("%c\n", answers[getAns()]); ghq(); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator