問題描述
作為水汙染管理部門的一名雇員,你需要監控那些被有意無意倒入河流、湖泊和海洋的汙染物。你的其中一項工作就是估計汙染物對不同的水生態系統(珊瑚礁、產卵地等等)造成的影響。
你計算所使用的模型已經在圖1中被說明。海岸線(圖1中的水平直線)為x軸,汙染源位於原點(0, 0)。汙染的蔓延呈半圓形,多邊形代表了被波及的生態系統。你需要計算出生態系統被汙染的面積,也就是圖中深藍色部分。
輸入格式
輸入檔案包含僅包含一組測試資料。
每組測試資料第一行為兩個整數n (3 <= n <= 100), r (1 <= r <= 1000),n表示了多邊形的頂點個數,r表示了汙染區域的半徑;
接下來n行,每行包含兩個整數xi (-1500 <= xi <= 1500), yi (0 <= yi <=1500),表示每個頂點的座標,以逆時針順序給出;
資料保證多邊形不自交或觸及自身,沒有頂點會位於圓弧上。
輸出格式
輸出多邊形被圓心位於原點、半徑為r的半圓覆蓋的面積。
答案的絕對誤差不得超過10^-3。
樣例輸入
6 10
-8 2
8 28 14
0 14
0 6-8 14
樣例輸出
101.576437872
資料規模和約定
存在約30%的資料,n = 3,r <= 20;
存在另外約30%的資料,n <= 10,r <= 100,座標範圍不超過100;
存在另外約10%的資料,n <= 100,r <= 150,座標範圍不超過250;
存在另外約30%的資料,n <= 100,r <= 1000,資料存在梯度;
對於100%的資料,滿足題目所示資料範圍。
思路:
利用叉乘計算任意多邊形面積的方法。
對每一對點先判斷三種情況:
(1)兩個點都在圓內;(2)乙個在圓內,乙個在圓外;(3)兩個點在圓外。
(1)可以直接叉乘計算;(2)找到與圓的交點,分為圓內一點和交點的面積+交點和圓外點形成的扇形面積。 (3)先判斷到原點最短距離的點c是否在圓內,若不在圓內直接計算扇形面積;若在圓內,遞迴計算area(a,c)+area(c,b);(第三種情況可能是1.兩個點均在圓外而且兩點的連線不與半圓相交2.兩點均在圓外但是兩點的連線與半圓相交)
#include#include#include#include#include#include#includeusing namespace std;
const int n=1e2+5;
const int m=n/2;
int n,r;
int x[n],y[n];
struct p
bool incircle()
double cross(p &b)
}; double getarea(p &a,p &b)
double cal(p &a,p &b)
else if(in1!=in2);
if(mid.incircle()==in1)
l=mid;
else
r=mid;
} if(in1)
return a.cross(mid)/2+getarea(mid,b);
else
return getarea(a,mid)+mid.cross(b)/2;
} else;
midr=p;
if(mid.getlength()>n>>r;
for(int i=0;i>x[i]>>y[i];
y[n]=y[0];
x[n]=x[0];
double ans=0;
for(int i=0;i
p b=p;
ans+=cal(a,b);
} printf("%lf\n",ans);0
return 0;
}
DL RBM訓練演算法
在學習hinton的stack autoencoder演算法 reducing the dimensionality of data with neural networks 之前需要了解什麼是rbm,現在就我學習的情況,查詢的資料 大部分來自部落格 簡單介紹一下rbm。當然,這裡面還有同組實驗的同...
演算法訓練 C Calculations
問題描述 c 語言和c 語言非常相似,然而c 的程式有時會出現意想不到的結果。比如像這樣的算術表示式 表示式 基本式 表示式 基本式 表示式 基本式 基本式 增量 係數 增量 增量 a a 係數 0 1 2 1000 如 5 a 3 a a 是合法的c 表示式。計算這樣的表示式的值的方法 首先是每個...
演算法訓練 暗戀
演算法訓練 暗戀 時間限制 1.0s 記憶體限制 256.0mb 問題描述 同在乙個高中,他卻不敢去找她,雖然在別人看來,那是再簡單不過的事。暗戀,是他唯一能做的事。他只能在每天課間操的時候,望望她的位置,看看她傾心的動作,就夠了。操場上的彩磚啊,你們的位置,就是他們能夠站立的地方,他倆的關係就像磚...