小b接水

解题思路
特别奇怪的一道题,只需要预处理出每个积木左边和右边最高的积木,取最小值就是这个积木可以储存的水,累加即可。
code
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
int n, ans;
int a[50010], b[50010], c[50010];
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
b[i]=max(b[i-1],a[i]);
}
for(int i=n;i>=1;i--)
c[i]=max(c[i+1],a[i]);
for(int i=1; i<=n; i++)
ans+=min(b[i],c[i])-a[i];
cout<<ans<<endl;
}

本文介绍了一种解决积木接水问题的有效算法。通过预处理找出每块积木左右两侧最高积木,以此计算出每块积木能够储存的水量,并最终累加得到总水量。代码使用C++实现。
167

被折叠的 条评论
为什么被折叠?



