初级天翼
Code:
#include <iostream>
using namespace std;
int a[10010];
int main()
{
int n,max=0;
long long int sum=0;
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>a[i];
if (a[i]>max)
max=a[i];
}
for (int i=1;i<=max;i++)
{
int l,r;
for (int j=1;j<n-1;j++)
{
if(a[j]>=i)
{
l=j;
break;
}
}
for (int j=n-2;j>=1;j--)
{
if(a[j]>=i)
{
r=j;
break;
}
}
for (int j=1;j<=r;j++)
{
if (a[j]<i)
sum++;
}
}
cout<<sum<<endl;
return 0;
}
大佬求助!
链接:https://www.luogu.org/problemnew/show/P1318
题目:
题目描述
一组正整数,分别表示由正方体叠起的柱子的高度。若某高度值为x,表示由x个正立方的方块迭起(如下图,0<=x<=5000)。找出所有可能积水的地方(图中蓝色部分),统计它们可能积水的面积总和(计算的是图中的横截面积。一个立方体的位置,为一个单位面积)。
如图:柱子高度变化为 0 1 0 2 1 2 0 0 2 0
图中蓝色部分为积水面积,共有6个单位面积积水。
输入输出格式
输入格式:
两行,第一行n,表示有n个数(3<=n<=10000)。第2行连续n个数表示依次由正方体迭起的高度,保证首尾为0。
输出格式:
一个数,可能积水的面积。
输入输出样例
输入样例#1: 复制
10 0 1 0 2 1 2 0 0 2 0
输出样例#1: 复制
6
栾峻岩在2019-05-17 18:42:42追加了内容
@葛新 @杨喆 @酷町喵~o( =∩ω∩= )o~ @贾敬波
初级守护
#include<iostream> #include<algorithm> using namespace std; int main() { int n,a[11000],l,r,ans=0; cin>>n; for (int i=1;i<=n;i++) cin>>a[i]; //去0 l=1;while (a[l]==0) l++; r=n;while (a[r]==0) r--; //正搜 int tmp=0,j=l,k=l+1; while (k<=r+1) if (a[k]<a[j]) { tmp+=a[k]; k++; } else { ans+=(k-j-1)*a[j]-tmp; tmp=0; j=k; k++; } //倒搜 tmp=0;j=r;k=r-1; while (k>=l-1) if (a[k]<=a[j]) { tmp+=a[k]; k--; } else { ans+=(j-k-1)*a[j]-tmp; tmp=0; j=k; k--; } cout<<ans; return 0; }