P1183 多边形的面积【洛谷算法习题】
P1183 多边形的面积网页链接P1183 多边形的面积题目描述给出一个没有缺口的简单多边形它的边是垂直或者水平的要求计算多边形的面积。多边形被放置在一个x O y xOyxOy的笛卡尔平面上它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整数因此多边形的面积也为整数。注意可能存在连续的三个顶点在一条直线上的情况。输入格式第一行给出多边形的顶点数n nn。接下来n nn行每行给出多边形一个顶点的坐标值x xx和y yy用空格隔开。顶点按逆时针方向逐个给出。多边形最后是靠从最后一个顶点到第一个顶点画一条边来封闭的。输出格式一行一个整数表示多边形的面积。输入输出样例 #1输入 #110 0 0 4 0 4 1 3 1 3 3 2 3 2 2 1 2 1 3 0 3输出 #19说明/提示对于100 % 100\%100%的数据1 ≤ n ≤ 100 1 \le n \le 1001≤n≤100− 200 ≤ x , y ≤ 200 -200 \le x,y \le 200−200≤x,y≤200。解题思路本题核心是鞋带公式求解简单多边形面积适配题目中水平/垂直边、逆时针顶点的条件。鞋带公式是计算任意简单多边形面积的通用方法将所有顶点按顺序存储最后把终点与起点闭合遍历计算每一组相邻顶点的叉乘和x i y i 1 − x i 1 y i x_i y_{i1} - x_{i1} y_ixiyi1−xi1yi将总和取绝对值后除以2即为多边形面积。题目明确面积为整数直接取整输出即可。该公式自动忽略连续共线顶点无需额外处理计算过程仅需线性遍历顶点时间复杂度O ( n ) O(n)O(n)简洁高效且精准。总结核心逻辑使用鞋带公式通过顶点坐标叉乘和计算多边形面积。关键操作闭合顶点序列、累加叉乘项、取绝对值减半后取整。效率保障线性遍历计算公式简洁自动处理共线顶点适配题目数据范围。代码内容#includebits/stdc.husingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvvt;typedefpairll,llpll;constll N1e310;constll p1e97;constll INF1e18;constll M1e610;doublea[105][2];doubleans0;intmain(){ll n;cinn;for(ll i0;in;i)cina[i][0]a[i][1];a[n][0]a[0][0],a[n][1]a[0][1];for(ll i0;in;i)ans0.5*(a[i][0]*a[i1][1]-a[i][1]*a[i1][0]);ll aans;coutaendl;return0;}