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

。。。。切题切的好猛,灌水也灌得好猛:D

Posted by Lapro at 2009-01-16 00:15:58 on Problem 1269
In 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:
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