Rabbit的蛋糕
https://ac.nowcoder.com/acm/contest/328/F
C++版本一
題解:計算幾何裸題
參考文章:https://blog.csdn.net/weixin_43272781/article/details/85800560
/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int using namespace std; typedef long long ll; //typedef __int128 lll; const int N=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,q; double ans; struct node{double x,y;}e[N]; double a[N]; char str; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endifscanf("%d%d",&n,&q);if(n==3){printf("%.6f",ans);return 0;}for(int i=1;i<=n;i++){scanf("%lf%lf",&e[i].x,&e[i].y);}for(int i=1;i<=n;i++){if(n==1)a[i]=a[i-1]+e[i].y*e[n].x-e[i].x*e[n].y;elsea[i]=a[i-1]+e[i].y*e[i-1].x-e[i].x*e[i-1].y;}double sum=fabs(a[n]/2);//cout<<sum<<endl;int s,t;while(q--){scanf("%d%d",&s,&t);if(s>t)swap(s,t);if(abs(s-t)==1||s==1&&t==n)continue;double sumtmp=fabs((a[t]-a[s]+e[s].y*e[t].x-e[s].x*e[t].y)/2);ans=max(ans,min(sumtmp,sum-sumtmp));}printf("%.6f",ans);//cout << "Hello world!" << endl;return 0; }C++版本二
題解:
計算幾何
只要叉積維護一下前綴和就好了。
?
總結
- 上一篇: 多边形面积(Area_Of_Polygo
- 下一篇: Yuhao and a Parenthe