POJ 2074 直線相交

2021-07-22 13:30:47 字數 1612 閱讀 8635

思路比較直接。

根據house的位置與每乙個obstruction之間的相對位置,求出在line上不能夠看到的區域area的位置。

對所有的位置進行線性掃瞄,找出最長的通視距離,這個掃瞄過程需要細緻。

最後還有幾個致命的trick,自己動手吧,wa看dicuss中的測試資料.

#include 

#include

#include

#include

#include

using

namespace

std;

const

double eps=1e-8;

const

int maxn=1000+10;

double ans;

int sgn(double x)

double max(double x,double y)

double min(double x,double y)

struct point

point(double _x,double _y)

};typedef point vector;

vector

operator + (vector a,vector b)

vector

operator - (point a,point b)

double

operator ^ (vector a,vector b)

double

operator * (vector a,vector b)

struct line

line(point _s,point _e)

};struct area

;line house; //房屋

line pro; //界址線

line obs[maxn]; //障礙物

double divide[2*maxn];

bool flag;

area area[maxn];

int n;//障礙的數目

int cmp(area x,area y)

void solve()

sort(area,area+n,cmp);

/*for(int i=0;idouble max=0;

double last=pro.s.x;

if(cnt!=0)

else

if(sgn(area[i].r-last) > 0)

last=area[i].r;

} if(sgn(last-pro.e.x)< 0)

max=max(max, pro.e.x-last);

}else

max=pro.e.x-pro.s.x;

if(sgn(max)==0)

flag=false;

else

ans=max;

}int main()

solve();

if(flag)

printf("%.2lf\n",ans);

else

cout

<<"no view"

<}

}

POJ 2074 直線交線段)

原題 line of sight 題意 站在一條線段property line上,去看另一條線段home,有一些障礙物擋著視線,求pl最長連續區間可以看另一條線段home的全貌。圖示 思路 1.去除不符合條件的障礙物 2.把每條線段擋住的區間求出來,然後遍歷一遍求最大區間即可。include inc...

POJ 2074 視線問題

如果求 能看見的部分 不是很好求的話,那麼我們就來看看哪些地方是看不見的。一開始看錯了題意,把 不能完全看見 錯看成了 完全不能看見 結果樣例都沒算對 不過,這兩件事之間倒是非常像 不能完全看見 的區域是,對於每乙個障礙物,房子的左端點連障礙的右端點,右端點連障礙的左端點,交於觀察線,其間的部分就不...

poj 1269 直線相交 平行

剛開始做這道題貌似很糾結的樣子,在糾結了更糾結的題目之後回來看這道題就是小case了 不過竟然把題目當成是判斷線段相交了。於是wa 自己弱弱的寫了乙個判斷平行的 其他直接用模板 include include include include include using namespace std d...