jilin university online judge system--2785:賽車
吉林大學oj上的題目。中文題。
這是經典的半平面交的模型。直接套用半平面交的模板,不過要注意,對有向直線排序的時候要用叉積來比較,不然精度會丟失,從而導致排序出錯。
**如下:
1 #include 2 #include 3 #include 4 #include 5 #include 6view code7using
namespace
std;89
const
double pi = acos(-1.0
);10
const
double eps = 1e-10
;11 inline int sgn(double x)
12struct
point
15 point(double x, double
y) : x(x), y(y) {}
16bool
operator
< (point a) const
17bool
operator == (point a) const
18} ;
19typedef point vec;
20 vec operator + (vec a, vec b)
21 vec operator - (vec a, vec b)
22 vec operator * (vec a, double p)
23 vec operator / (vec a, double p)
24 inline double dotdet(vec a, vec b)
25 inline double crossdet(vec a, vec b)
26 inline double crossdet(point o, point a, point b)
27 inline double veclen(vec x)
28 inline double ptdis(point a, point b)
29inline vec normal(vec x)
33 inline vec vecunit(vec x)
3435
struct
dline
41 dline(point p, vec v) : p(p), v(v)
42bool
operator
< (const dline &l) const
43bool
operator == (const dline &l) const
44} ;
4546 inline bool onleft(dline l, point p)
47point dlineintersect(dline a, dline b)
5253
const
int n = 11111;54
point p[n];
55dline q[n], rec[n];
56int
ans[n], ansend;
5758
bool
cmp(dline a, dline b)
6162
void halfplane(dline *l, int
n) 81
if (fi < la) p[la - 1] = dlineintersect(q[la - 1
], q[la]);
82//
cout << p[la - 1].x << ' ' << p[la - 1].y << endl;
83//
cout << fi << "=3=" << la << endl;84}
85while (fi < la && !onleft(q[fi], p[la - 1])) la--;
86//
cout << fi << ' ' << la << endl;
87for (int i = fi; i <= la; i++) ans[ansend++] =q[i].id;88}
8990
double
b[n], a;
9192
intmain()
102 rec[n] = dline(point(0, 1), vec(0.0, -1.0
));103 rec[n].id = 0
;104 halfplane(rec, n + 1
);105 cout << ansend - 1
<
106 sort(ans, ans +ansend);
107for (int i = 1; i < ansend; i++)
111 puts(""
);112
}113
return0;
114 }
——written by lyon
JLOI2013 賽車(半平面交)
很顯然的半平面交,需要注意幾個細節。首先三線交於一點的時候中間那個點不能彈,然後重合的直線顯然結果是相同的,再就是必須在第一象限。由於給的就是解析式,直接用解析式做半平面交就行了,我的寫法沒有用double include define ll long long define re register...
bzoj 3190 賽車 半平面交
直接寫的裸的半平面交,已經有點背不過模板了。這題卡精度,要用long double esp設1e 20。include include include include include include include define n 20005 define double long double d...
半平面交模板
妹的,一直沒有想清楚無解的情況到底是如何判斷的。偷來乙個模板。半平面交的結果 1.凸多邊形 後面會講解到 2.無界,因為有可能若干半平面沒有形成封閉3.直線,線段,點,空 屬於特殊情況吧 演算法 1 根據上圖可以知道,運用給出的多邊形每相鄰兩點形成一條直線來切割原有多邊形,如果多邊形上的點i在有向直...