牛客練習賽36 F Rabbit的蛋糕(計算幾何)

2021-09-07 09:44:16 字數 2481 閱讀 8809

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

special judge, 64bit io format: %lld

題目描述

rabbit和***獲得了乙個很大的蛋糕,這個蛋糕實際上是由n個點組成的凸多邊形(點從1到n編號,保證沒有三點共線)。

接著兩個人開始分蛋糕,他們準備沿著蛋糕上兩點連成的直線把蛋糕切成兩份,由於rabbit是女生,***總會把大的那乙份分給rabbit。現在有q種切的方案,***可以選擇任意一種,問***最多能分得多少蛋糕?

輸入描述:

第一行兩個整數n,q。

接下來n行,每行兩個數xi,

yi

x_i,y_i

xi​,yi

​表示第i個點的座標(點按逆時針順序給出)。

接下來q行,每行兩個整數s,t表示切的兩個點。

輸出描述:

輸出***最多能分得多少面積的蛋糕。

示例1輸入

4 20.5 0.5

10.5 0.5

10.5 10.5

0.5 10.5

1 34 2

輸出50.00

備註:3

<=n

<=1

05

3<=n<=10^5

3<=n

<=1

051

<=q

<=1

05

1<=q<=10^5

1<=q

<=1

05− 10

5<=x

i,yi

<=1

05

−10^5<=x_i,y_i<=10^5

−105

<=x

i​,y

i​<=1

051

<=s

,t

<=n

,s!=

t1<=s,t<=n,s!=t

1<=s

,t<=n

,s!=

t本題採用special judge,假設你的答案為a,標程答案為b,如果滿足∣a−

b∣ma

x(1,

∣b∣)

≤10−

4\frac≤10^

max(1,

∣b∣)

∣a−b

∣​≤1

0−4,則認為是正確的。

思路:計算s,t兩點連線分割多邊形所得到的某一半的面積,可以利用叉積來求,從s點開始遍歷到t點,即:are

a=∑i

=s+1

t(xi

−xs)

(yi−

1−ys

)−(x

i−1−

xs)(

yi−y

s)

area=\sum_^ (x_i-x_s)(y_-y_s)-(x_-x_s)(y_i-y_s)

area=i

=s+1

∑t​(

xi​−

xs​)

(yi−

1​−y

s​)−

(xi−

1​−x

s​)(

yi​−

ys​)

化簡可得:are

a=∑i

=s+1

txiy

i−1−

xi−1

yi+x

s(yi

−yi−

1)+y

s(xi

−1−x

i)

area=\sum_^ x_iy_-x_y_i+x_s(y_i-y_)+y_s(x_-x_i)

area=i

=s+1

∑t​x

i​yi

−1​−

xi−1

​yi​

+xs​

(yi​

−yi−

1​)+

ys​(

xi−1

​−xi

​)然後就可以用字首和記錄了,遍歷的時候再求答案即可。

#includeusing namespace std;

const int max=1e5+10;

const int mod=1e9+7;

typedef long long ll;

struct pointp[max];

struct lenkaa[max];

point operator-(point a,point b);}

double operator^(point a,point b)

double polyarea(point *p,int n)

double ans=0,area=polyarea(p,n);

for(int i=0;iprintf("%.10f\n",ans/2.0);

return 0;

}

牛客練習賽36 BCDF題解

b.rabbit的工作 1 思路 設d i j p 為在 i 天時,一共工作了 j 天,且連續工作了 p 天直到第 i 天時花費的最小體力。那麼轉移方程很簡單 update 已經被hacked 如果第 i 天我不工作,那麼對於所有的合法的 p,d i j 0 max d i 1 j p 如果我第 i...

牛客練習賽36B題

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld rabbit大學畢業後找到了乙份實習工作,如果實習通過她就轉正了。實習期共有n天,其中有幾天公司集體放假,rabbit不用上班,剩下時間她可以選擇工作或者休息。rabb...

牛客練習賽9

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...