Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

看一下我的思路有没有错误

Posted by fxlbest at 2005-11-09 16:45:27 on Problem 1410
#include <stdio.h>
int main() {
    double xstart,ystart,xend,yend,xleft,ytop,xright,ybottom;
    int t,d;
    double k,xmin,ymin,xmax,ymax,x,y;
    scanf("%d",&d);
    for(t=0;t<d;t++) {
        scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&xstart,&ystart,&xend,&yend,&xleft,&ytop,&xright,&ybottom);
        //判断长方形左上右下是否正确 
        if(xleft>xright) {                                   
            x=xleft;xleft=xright;xright=x;
            y=ytop;ytop=ybottom;ybottom=y;
        }
        //若线段其中有一端点在长方形里面,则必相交    
        if(xleft<=xstart && xstart<=xright && ybottom<=ystart && ystart<=ytop) {printf("T\n");continue;}
        if(xleft<=xend && xend<=xright && ybottom<=yend && yend<=ytop) {printf("T\n");continue;}
        //用xmin,ymin保存线段的x,y的较小值,xmax,ymax保存线段的x,y的较大值 
        xmin=xstart>xend?xend:xstart;
        xmax=xstart>xend?xstart:xend;
        ymin=ystart>yend?yend:ystart;
        ymax=ystart>yend?ystart:yend;
        //若线段垂直于x轴 
        if(xstart==xend) {
            if((xleft<=xend && xend<=xright) && ((ymin<=ytop && ytop<=ymax) || (ymin<=ybottom && ybottom<=ymax))){
                printf("T\n");continue;
            }
            printf("F\n");continue;
        }
        //若线段平行于x轴 
        if(ystart==yend) {
            if((ybottom<=yend && yend<=ytop) && ((xmin<=xleft && xleft<=xmax) || (xmin<=xright && xright<=xmax))){
                printf("T\n");continue;
            }
            printf("F\n");continue;
        } 
        //其它       
        k=1.0*(ystart-yend)/(xstart-xend); 
        //若长方形上边可能与线段相交 
        if(ymin<=ytop && ytop<=ymax) {
            y=ytop;
            x=1.0*(y-ystart)/k+xstart;
            if(xleft<=x && x<=xright) {printf("T\n");continue;}
            printf("F\n");continue;
        }
        //若长方形下边可能与线段相交 
        if(ymin<=ybottom && ybottom<=ymax) {
            y=ybottom;
            x=1.0*(y-ystart)/k+xstart;
            if(xleft<=x && x<=xright) {printf("T\n");continue;}
            printf("F\n");continue;
        }
        //若长方形左边可能与线段相交 
        if(xmin<=xleft && xleft<=xmax) {
            x=xleft;
            y=1.0*k*(x-xstart)+ystart;
            if(ybottom<=y && y<=ytop) {printf("T\n");continue;}
            printf("F\n");continue;
        }
        //若长方形右边可能与线段相交 
        if(xmin<=xright && xright<=xmax) {
            x=xright;
            y=1.0*k*(x-xstart)+ystart;
            if(ybottom<=y && y<=ytop) {printf("T\n");continue;}
            printf("F\n");continue;
        }
        //长方形不可能与线段相交 
        printf("F\n");
    }
    return 0;
}                
                
                    
        

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator