HDU 2056 Rectangles(不要想太多的)

Rectangles

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 38013 Accepted Submission(s): 12470

Problem Description
Given two rectangles and the coordinates of two points on the diagonals of each rectangle,you have to calculate the area of the intersected part of two rectangles. its sides are parallel to OX and OY .

Input
Input The first line of input is 8 positive numbers which indicate the coordinates of four points that must be on each diagonal.The 8 numbers are x1,y1,x2,y2,x3,y3,x4,y4.That means the two points on the first rectangle are(x1,y1),(x2,y2);the other two points on the second rectangle are (x3,y3),(x4,y4).

Output
Output For each case output the area of their intersected part in a single line.accurate up to 2 decimal places.

Sample Input
1.00 1.00 3.00 3.00 2.00 2.00 4.00 4.00
5.00 5.00 13.00 13.00 4.00 4.00 12.50 12.50

Sample Output
1.00
56.25

對角線,不要考慮太多的或者想太多!我們是由簡單到繁瑣

#include<iostream>
using namespace std;
#include<iomanip>
//swap的作用:1,將對角線兩種對角線統一轉化爲左下角到右上角。2,將順序調整,保證對角線的左下角的橫縱座標都小於右上角的橫縱座標

//採用引用無需返回值,更高效快捷
void swap(double &x,double &y)//交換數據
	double temp;
	if(x>y)
	{
		temp=x;
		x=y;
		y=temp;
	}
}
int main()
{
	double x1,y1,x2,y2,x3,y3,x4,y4;
	double a,b,c,d;
	double sum;
	while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4)
	{
		swap(x1,x2);
		swap(y1,y2);
		swap(x3,x4);
		swap(y3,y4);
		if(x3>=x2||y3>=y2||x4<=x1||y4<=y1)
			sum=0;
		else
		{/*不止這兩種情況(可能還存在包含關係,比喻第二個矩形的兩個橫座標都在第一個矩形的兩個橫座標範圍內,即第一個矩形包含第二個矩形)
			// if(x3>=x1&&x3<x2)
			// {
				// sum=(x2-x3)*(y2-y3);
				
			// }
			// if(x4>=x1&&x4<x2)
			// {
				// sum=(x4-x1)*(y4-y1);
			// }*/
			
			a=x1>x3?x1:x3;
			b=x2>x4?x4:x2;
			c=y1>y3?y1:y3;
			d=y2>y4?y4:y2;
			//包含啦你想到的所有的情況!
			sum=(b-a)*(d-c);
			//因爲存在包含關係
		}
		cout<<setiosflags(ios::fixed)<<setprecision(2)<<sum<<endl;
	}
	return 0;
}
			
		
		
	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章