赞
踩
根据输入,我们要求蓝色方块的个数,即最多能倒多少桶水不会溢出
n = int(input())
arr = list(map(int, input().split()))
def count_elements(arr):
n = len(arr)
count = 0
for i in range(1, n-1):
while arr[i] + 1 <= max(arr[0:i]) and arr[i] + 1 <= max(arr[i+1:n]):
arr[i] += 1
count += 1
return count
print(count_elements(arr))
我感觉应该还有一种从上往下填充的思路,就是先找到最高层,然后找第二高层,从第二高层的位置往最高层所在位置划线,求第二高与最高层中间所有层的差值并求和,然后再找第三高层,到这我感觉接下来情况就有点复杂了,需要分情况讨论,不如从下往上填充起来简单,就没再想了。
但是上述代码只能通过3/10的测试用例,原因是超时了。
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,maxn=0;
cin>>n;
vector<int>a;
int tmp;
int ans=0;
for(int i=0;i<n;i++)
{
cin>>tmp;
maxn=max(maxn,tmp);//获取最大高度
a.push_back(tmp);
}
/*思路:从高度为1开始遍历到maxn,计算不低于每一层高度的坐标点之间的距离,则是可以加的水的桶数*/
for(int i=1;i<=maxn;i++)//从高度为1开始遍历到maxn
{
int last=-1;
for(int j=0;j<n;j++)
{
if(a[j]>=i)
{
if(last!=-1) ans+=j-last-1;
last=j;
}
}
}
cout<<ans<<endl;
return 0;
}
n = int(input())
arr = list(map(int, input().split()))
def count_elements(arr):
n = len(arr)
count = 0
for i in range(1, n-1):
max_left = max(arr[0:i])
max_right = max(arr[i+1:n])
next_val = arr[i] + 1
while next_val <= max_left and next_val <= max_right:
next_val += 1
count += 1
print(count)
count_elements(arr)
这次可以通过4个测试用例了,也算进步了吧,没精力了,就这样吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。