思路比較直接。
根據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...