• 洛谷 P1318 积水面积


    洛谷 P1318 积水面积

    链接

    https://www.luogu.org/problem/P1318

    题目

    题目描述

    一组正整数,分别表示由正方体叠起的柱子的高度。若某高度值为x,表示由x个正立方的方块迭起(如下图,0<=x<=5000)。找出所有可能积水的地方(图中蓝色部分),统计它们可能积水的面积总和(计算的是图中的横截面积。一个立方体的位置,为一个单位面积)。

    如图:柱子高度变化为 0 1 0 2 1 2 0 0 2 0

    img

    图中蓝色部分为积水面积,共有6个单位面积积水。

    输入格式

    两行,第一行n,表示有n个数(3<=n<=10000)。第2行连续n个数表示依次由正方体迭起的高度,保证首尾为0。

    输出格式

    一个数,可能积水的面积。

    输入输出样例

    输入 #1

    10
    0 1 0 2 1 2 0 0 2 0
    

    输出 #1

    6
    

    思路

    我的思路是左右向中间,从下往上。

    首先输入,找到最大值,之后从1开始循环,这个j是高度的意思,left和right就是左右达到这个高度的最前一个,之后添加数字,直接判断大小就行,到最后一个结束,输出结果。

    (最近心态不好,人很迷茫,估计骚话环节也没了,以上)

    代码

    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    int main()
    {
    	int maxn,ans;
    	int num[12580];
    	int n,left,right;
    	cin>>n; 
        
        for(int i=1;i<=n;i++)
    	{
            cin>>num[i];
            maxn=max(maxn,num[i]);
        }
        
        for(int j=1;j<=maxn;j++)
    	{
            for(int i=2;i<=n-1;i++)
            {
            	if(num[i]>=j)
    			{ 
    				left=i;
    				i=n; 
    			}
    		}
            for(int i=n-1;i>=2;i--)
            {
            	if(num[i]>=j)
    			{ 
    				right=i;
    				i=1; 
    			}
    		}
                
            for(int i=left;i<right;i++)
            {
            	if(num[i]<j)
    				ans++; 
    		}
                    
        }
        cout<<ans;
    }
    
  • 相关阅读:
    文件同步工具
    截图工具
    DBF文件工具
    Oracle旗下的开源虚拟机
    远程协助工具
    切换网络IP工具
    MySQL(C#的链接姿势)
    大写URL转小写
    一个textview实现文字在图片上面的效果
    通过代码设置textview颜色
  • 原文地址:https://www.cnblogs.com/blogxjc/p/11410715.html
Copyright © 2020-2023  润新知