原題: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...