| ||||||||||
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 |
。。。。切题切的好猛,灌水也灌得好猛:DIn Reply To:16天终于A下了50道~在此留下牙齿印,以示向100道冲刺的决心;接下来一个月可能要回家,再也没电脑上网了,我会永远想念这一段A题的日子 Posted by:gfedcba at 2009-01-15 19:54:13 > #include <iostream> > #include <iomanip> > using namespace std; > > struct Point > { > int x; > int y; > }; > > // 这道题关键在于处理直线和X轴垂直的情况,因为这种情况斜率是无穷大的,无法通过常规处理 > // 其它的情况自己可以通过斜率和截距推导出结果 > > > int main() > { > int n; > int i; > double k12,b12; // 直线1的斜率和Y截距 > double k34,b34; // 直线2的斜率和Y截距 > Point p[4]; > double intersectX, intersectY; // 相交点 > cin>>n; > cout<<"INTERSECTING LINES OUTPUT"<<endl; > > while (n--) > { > // p[1]和P[2]为直线1的两个点,p[3]和p[4]为直线2的两个点 > for (i=1; i<=4; i++) > { > cin>>p[i].x>>p[i].y; > } > > if (p[1].x==p[2].x && p[3].x==p[4].x) // 直线1和直线2都与X轴垂直 > { > if (p[2].x == p[3].x) > { > cout<<"LINE"<<endl; > } > else > { > cout<<"NONE"<<endl; > } > } > else if (p[1].x==p[2].x && p[3].x!=p[4].x) // 直线1垂直,直线2不垂直 > { > k34 = double(p[4].y - p[3].y)/(p[4].x-p[3].x); > b34 = double(p[3].x*p[4].y - p[4].x*p[3].y)/(p[3].x-p[4].x); > intersectX = p[1].x; > intersectY = k34*intersectX + b34; > cout<<setiosflags(ios::fixed)<<setprecision(2)<<"POINT "<<intersectX<<" "<<intersectY<<endl; > } > else if (p[1].x!=p[2].x && p[3].x==p[4].x)// 直线1不垂直,直线2垂直 > { > k12 = double(p[2].y - p[1].y)/(p[2].x-p[1].x); > b12 = double(p[1].x*p[2].y - p[2].x*p[1].y)/(p[1].x-p[2].x); > intersectX = p[3].x; > intersectY = k12*intersectX + b12; > cout<<setiosflags(ios::fixed)<<setprecision(2)<<"POINT "<<intersectX<<" "<<intersectY<<endl; > } > else // 都不垂直 > { > k12 = double(p[2].y - p[1].y)/(p[2].x-p[1].x); > b12 = double(p[1].x*p[2].y - p[2].x*p[1].y)/(p[1].x-p[2].x); > k34 = double(p[4].y - p[3].y)/(p[4].x-p[3].x); > b34 = double(p[3].x*p[4].y - p[4].x*p[3].y)/(p[3].x-p[4].x); > > if (k12 == k34) // 斜率相同 > { > if (k12*p[1].x+b12 == k34*p[1].x+b34) // 重叠 > { > cout<<"LINE"<<endl; > } > else // 平行 > { > cout<<"NONE"<<endl; > } > } > else // 斜率不同 > { > intersectX = -(b34-b12)/(k34-k12); // 相交 > intersectY = k12*intersectX + b12; > cout<<setiosflags(ios::fixed)<<setprecision(2)<<"POINT "<<intersectX<<" "<<intersectY<<endl; > } > > } > } > > cout<<"END OF OUTPUT"<<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