解題思路:
二分圓的半徑,然後用半平面交解得是否有解,最後在有解的多邊形中取最遠的兩個點看他們的距離是否超過直接,如果超過,那麼以這兩個點為圓心的兩個圓就不會相交了。最遠的點也就是列舉頂點兩兩的距離。
#include using namespace std;
typedef long long ll;
const int mx = 2e2 + 10;
int n;
struct point; }
double operator * (point a)const
point operator + (point a)const
; }point operator * (double d)const
; }}s[mx],tmp[2],pue[mx],ans[2];
typedef point vec;
struct line
}l[mx],lue[mx];
point getp(point p,double angle,double r);}
point intersection(line a,line b)
;*/ vec u = a.p1 - b.p1;
double t = (b.v*u) / (a.v*b.v);
return a.p1 + a.v*t;
}double dist(point a,point b)
bool judge(int l,int r,double m)
bool onright(line a,point b)
; return d <= 0;
}bool check(double m)
sort(l,l+n);
int tail = 0,head = 0;
lue[0] = l[0];
for(int i=1;iwhile(headpue[tail] = intersection(lue[tail],lue[head]);
return judge(head,tail,m);
}int main()
double l = 0,r = 1e5;
for(int i=1;i<=100;i++)
printf("%.8lf\n",l);
printf("%.8lf %.8lf\n",ans[0].x,ans[0].y);
printf("%.8lf %.8lf\n",ans[1].x,ans[1].y);
} return 0;}/*
50 0
3 44 6
6 10
10 18
*/
半平面交模板
妹的,一直沒有想清楚無解的情況到底是如何判斷的。偷來乙個模板。半平面交的結果 1.凸多邊形 後面會講解到 2.無界,因為有可能若干半平面沒有形成封閉3.直線,線段,點,空 屬於特殊情況吧 演算法 1 根據上圖可以知道,運用給出的多邊形每相鄰兩點形成一條直線來切割原有多邊形,如果多邊形上的點i在有向直...
模板 半平面交
考慮用射線 乙個點和乙個向量 表示它左側的半平面 那麼我們可以先按與x軸正半軸夾角 可用atan2 y,x 實現 排序,然後再用雙端佇列維護當前在交中的射線即可 之所以要用雙端佇列,是因為新插入乙個半平面時隊首和隊尾都有可能被彈出,而且要注意的是,要先彈隊尾再彈隊首 在最後,還要再用隊首的彈一些隊尾...
半平面交 板子
poj 2451 敲了個板子,比帶花樹稍微好一些,但是還是很麻煩.寫了點注釋 include include include define point vector const int n 2e4 10 struct vector vector double x,double y double an...