POJ 2074 直線交線段)

2021-10-03 12:12:27 字數 943 閱讀 9206

原題:line of sight

題意:站在一條線段property line上,去看另一條線段home,有一些障礙物擋著視線,求pl最長連續區間可以看另一條線段home的全貌。

圖示:

思路:1.去除不符合條件的障礙物

2.把每條線段擋住的區間求出來,然後遍歷一遍求最大區間即可。

**:

#include #include #include #include typedef long long ll;

using namespace std;

const double eps=1e-8;

const int n=1e3+10;

//判斷正負和0

int sgn(double x)

double t=((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));

res.x+=(e.x-s.x)*t;

res.y+=(e.y-s.y)*t;

return make_pair(res,2);//兩直線相交

}}ls[n],hl,pl,l;

struct node

a[n];

int n,cnt,len;

double ans;

bool cmp(const node&a,const node&b)

sort(a+1,a+1+cnt,cmp);

if(!cnt) ans=pl.e.x-pl.s.x;

else

if(pre

} if(sgn(ans)==0) puts("no view");

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

}return 0;

}

POJ 2074 直線相交

思路比較直接。根據house的位置與每乙個obstruction之間的相對位置,求出在line上不能夠看到的區域area的位置。對所有的位置進行線性掃瞄,找出最長的通視距離,這個掃瞄過程需要細緻。最後還有幾個致命的trick,自己動手吧,wa看dicuss中的測試資料.include include...

POJ 2074 視線問題

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

POJ 3304 Segments 基礎線段交判斷

link 題意 詢問是否存在直線,使得所有線段在其上的投影擁有公共點 思路 如果投影擁有公共區域,那麼從投影的公共區域作垂線,顯然能夠與所有線段相交,那麼題目轉換為詢問是否存在直線與所有線段相交。判斷相交先求叉積再用跨立實驗。列舉每個線段的起始結束點作為直線起點終點遍歷即可。date 2017 07...