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 |
高手请帮忙看看这个为什么是WA#include <iostream.h> static int amount=1; struct point { int x; int y; }; point *getTheNearestPoint(point *originPoint, point *points, int pointSize,int direction) { point *temp=new point(); if(direction==3){ int small=100; for(int i=0;i<pointSize;i++) if(points[i].y==originPoint->y && points[i].x<originPoint->x && small>(originPoint->x-points[i].x)) small=originPoint->x-points[i].x; if(small==100){ temp=NULL; } else { temp->x=originPoint->x-small; temp->y=originPoint->y; } } if(direction==1){ int small=100; for(int i=0;i<pointSize;i++) if(points[i].y==originPoint->y && points[i].x>originPoint->x && small>(points[i].x-originPoint->x)) small=points[i].x-originPoint->x; if(small==100){ temp=NULL; } else { temp->x=originPoint->x+small; temp->y=originPoint->y; } } if(direction==4){ int small=100; for(int i=0;i<pointSize;i++) if(points[i].x==originPoint->x && points[i].y>originPoint->y && small>(points[i].y-originPoint->y)) small=points[i].y-originPoint->y; if(small==100){ temp=NULL; } else { temp->y=originPoint->y+small; temp->x=originPoint->x; } } if(direction==2){ int small=100; for(int i=0;i<pointSize;i++) if(points[i].x==originPoint->x && points[i].y<originPoint->y && small>(originPoint->y-points[i].y)) small=originPoint->y-points[i].y; if(small==100){ temp=NULL; } else { temp->y=originPoint->y-small; temp->x=originPoint->x; } } return temp; } point *count(int size, point *originPoint, point *points, int pointSize, int direction) { point *temp=getTheNearestPoint(originPoint,points,pointSize,direction); // if(temp!=NULL) // cout<<"nearest :"<<temp->x<<","<<temp->y<<endl; if(temp==NULL){ temp=new point(); if(direction==3){ temp->x=0; temp->y=originPoint->y; } if(direction==1){ temp->x=size; temp->y=originPoint->y; } if(direction==2){ temp->x=originPoint->x; temp->y=0; } if(direction==4){ temp->x=originPoint->x; temp->y=size; } return temp; } else { amount++; if(amount>200){ temp->x=0; temp->y=0; return temp; } direction++; if(direction==5) direction=1; originPoint->x=temp->x; originPoint->y=temp->y; return count(size,originPoint,points,pointSize,direction); } } int main() { int testTime; cin>>testTime; int boardSize,pointSize,direction; point *points=NULL; point *originPoint=NULL,*finalPoint=NULL; for(int i=0;i<testTime;i++) { cin>>boardSize; cin>>pointSize; points=new point[pointSize]; for(int j=0;j<pointSize;j++) cin>>points[j].x>>points[j].y; originPoint=new point(); cin>>originPoint->x>>originPoint->y; if(originPoint->x>=boardSize && (originPoint->y>=0 && originPoint->y<=boardSize)) direction=3; if(originPoint->x<=0 && (originPoint->y>=0 && originPoint->y<=boardSize)) direction=1; if(originPoint->y>=boardSize && (originPoint->x>=0 && originPoint->x<=boardSize)) direction=2; if(originPoint->y<=0 && (originPoint->x>=0 && originPoint->x<=boardSize)) direction=4; // cout<<direction; finalPoint=count(boardSize,originPoint,points,pointSize,direction); cout<<finalPoint->x<<" "<<finalPoint->y<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator