P9024 Crazy Fencing 题解

· · 题解

这是一道简单数学题。

主要应用到梯形面积公式:S=\dfrac{1}{2}(a+b)h,其中 S 为面积, a 为上底,b 为下底(上下顺序无所谓),h 为高,如果记得没错的话,这是小学四年级的知识。

这个公式和这道题有什么关系呢?我们来看一下这个图(其实就是题目中的原图):

可以把每个栅栏看作一个直角梯形,则整个栅栏由三个直角梯形组成,因此我们只需要计算这三个梯形的总面积即可。对于每一个梯形,它的上、下底即为该栅栏两个边界的高,它的高 h 即为该栅栏的宽,所以我们很容易可以得出以下代码:

#include <iostream>
using namespace std;
const int maxn=1e4+5;
int n,h[maxn],w[maxn];//h记录栅栏边界高,w记录栅栏的宽。
double ans;
int main(){
    scanf("%d",&n);
    for(int i=0;i<=n;i++) scanf("%d",&h[i]);
    for(int i=0;i<n;i++) scanf("%d",&w[i]);
    for(int i=0;i<n;i++) ans+=(double)(h[i]+h[i+1])*w[i]/2;//计算每一个梯形的面积。
    printf("%.1f",ans);//格式化输出。
    return 0;
}