程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1255 覆蓋的面積 線段樹求面積的交 我感覺有點難啊~~第一次寫這種類型的

hdu 1255 覆蓋的面積 線段樹求面積的交 我感覺有點難啊~~第一次寫這種類型的

編輯:C++入門知識

hdu 1255 覆蓋的面積 線段樹求面積的交 我感覺有點難啊~~第一次寫這種類型的


覆蓋的面積

Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3968 Accepted Submission(s): 1967



Problem Description 給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.

\


Input 輸入數據的第一行是一個正整數T(1<=T<=100),代表測試數據的數量.每個測試數據的第一行是一個正整數N(1<=N<=1000),代表矩形的數量,然後是N行數據,每一行包含四個浮點數,代表平面上的一個矩形的左上角坐標和右下角坐標,矩形的上下邊和X軸平行,左右邊和Y軸平行.坐標的范圍從0到100000.

注意:本題的輸入數據較多,推薦使用scanf讀入數據.

Output 對於每組測試數據,請計算出被這些矩形覆蓋過至少兩次的區域的面積.結果保留兩位小數.

Sample Input
2
5
1 1 4 2
1 3 3 7
2 1.5 5 4.5
3.5 1.25 7.5 4
6 3 10 7
3
0 0 1 1
1 0 2 1
2 0 3 1

Sample Output
7.63
0.00
上博客吧~~我是沒能力講解啊~ http://www.cnblogs.com/ka200812/archive/2011/11/13/2247064.html
代碼:
#include 
#include 

using namespace std ;

double y[2010] ;

struct Line{
	double x,y_up,y_down ;
	int mark;
}line[2010];

struct node{
	double x;
	double y_up,y_down;
	double cover;
	bool isLeaf ;
}st[400100];

void build(int l , int r , int pos)
{
	st[pos].x = -1   ;
	st[pos].y_down = y[l] ;
	st[pos].y_up = y[r] ;
	st[pos].cover = 0 ;
	st[pos].isLeaf = false ;
	if(l+1 == r)
	{
		st[pos].isLeaf = true ;
		return ;
	}
	int mid = (l+r)>>1 ;
	build(l,mid,pos<<1) ;
	build(mid,r,pos<<1|1) ;
}

double insert(double x , double y_down , double y_up , int mark , int pos)
{
	if(st[pos].y_down>=y_up || st[pos].y_up<=y_down)
	{
		return 0 ;
	}
	if(st[pos].isLeaf)
	{
		if(st[pos].cover>1)
		{
			double tempx = st[pos].x ;
			double area = (x-tempx)*(st[pos].y_up-st[pos].y_down) ;
			st[pos].x = x ;
			st[pos].cover += mark ;
			return area ;
		}
		else
		{
			st[pos].cover += mark ;
			st[pos].x = x ;
			return 0 ;
		}
	}
	return insert(x,y_down,y_up,mark,pos<<1)+insert(x,y_down,y_up,mark,pos<<1|1) ;
}
bool cmp(const Line &a , const Line &b)
{
	return a.x

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved