時間限制: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
∑tx
iyi
−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個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...