首页 > 其他 > 详细

题解 CF581B 【Luxurious Houses】

时间:2019-10-07 00:09:59      阅读:118      评论:0      收藏:0      [点我收藏+]

不难看出,题目要求的是每一个房子后面最高的房子与它的高度差\(+1\),(如果比它矮输出\(0\)

我们定义

  • \(maxn[i]\)表示第\(i\)到第\(n\)个房子高度的最大值(\(n\)为房子数)

  • \(h[i]\)表示第\(i\)个房子的高度

因为\(maxn[i+1]\)存放的已经是第\(i+1\)到第\(n\)个房子的最大值了,所以第\(i\)到第\(n\)个房子的最大值只要让当前房子的高度与\(maxn[i+1]\)进行比较即可

\(maxn[i]=max(h[i],maxn[i+1])\)

代码如下

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
int n;
int h[MAXN] , maxn[MAXN];
int main()
{
    ios::sync_with_stdio(false);
    cin >> n;
    for(int i = 1; i <= n; i ++)
    {
        cin >> h[i];
    }
    for(int i = n; i >= 2; i --)
       maxn[i] = max(h[i] , maxn[i + 1]); //预处理最大值
    for(int i = 1; i <= n - 1; i ++)
      cout << max(maxn[i + 1] - h[i] + 1 , 0) << " ";//如果没比它高要输出0!
    cout << 0;//最后一个后面已经没有房子了当然是0
    return 0;
}

题解 CF581B 【Luxurious Houses】

原文:https://www.cnblogs.com/WKAHPM/p/11628913.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!