2021-6-5 ACM-SDU 集训题解

2021-6-5 ACM-SDU 集训题解

总体来说,这次的题目相对简单,选择几个稍微值得注意的题写题解

B

原题传送门:Problem - B - Codeforces

题意:有一个严格的凸多边形,求此凸多边形的内接三角形的面积的最小值。

解题思路:不难想到,对一个凸多边形,若其内接三角形面积取到最小,那么这个三角形一定与原多边形有两条公共边。(证明??不存在的

(其实证明的话自己画下图就能知道啦!)

实现:预处理一下数据(由于点是按照顺序给的,所以我们只需要把头两个节点放在数组后即可)

取连续三个点当作三角形的顶点,算三角形的面积,取所有的面积的最大值为ans

源码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+7;
ll n,xx[maxn],yy[maxn];
ll res=4e18;//由于求最小值,所以初始化较大
ll getres(ll x1,ll y1,ll x2,ll y2){
    return abs(x1*y2-x2*y1);//求叉乘
}
int main(){
    cin>>n;
    for(int i=0;i<n;++i){
        cin>>xx[i]>>yy[i];
    }

    xx[n]=xx[0];yy[n]=yy[0];//数据的预处理
    xx[n+1]=xx[1];yy[n+1]=yy[1];

    for(int i=0;i<n;++i){//计算以i,i+1,i+2为顶点的三角形面积
        ll tempx1=xx[i+1]-xx[i],tempy1=yy[i+1]-yy[i];
        ll tempx2=xx[i+2]-xx[i],tempy2=yy[i+2]-yy[i];
        res=min(res,getres(tempx1,tempy1,tempx2,tempy2));
    }

    cout<<res<<endl;

}
上一篇:YY/T 0664—2020《医疗器械软件 软件生存周期过程》 相关


下一篇:9-23.表单实战