JOJ 2785 賽車 (半平面交)

2022-09-16 08:54:15 字數 2557 閱讀 2416

jilin university online judge system--2785:賽車

吉林大學oj上的題目。中文題。

這是經典的半平面交的模型。直接套用半平面交的模板,不過要注意,對有向直線排序的時候要用叉積來比較,不然精度會丟失,從而導致排序出錯。

**如下:

1 #include 2 #include 3 #include 4 #include 5 #include 6

7using

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 }

view code

——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在有向直...