码迷,mamicode.com
首页 > 其他好文 > 详细

Uva 1442

时间:2015-12-23 00:27:26      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

题目:Uva 1442

思路:处理出每一点能往左和往右延伸的不碰到天花板的最长高度。然后答案就是min(l[i],r[i])-p[i]。

技术分享
#include<bits/stdc++.h>

using namespace std;

int hu[1000100];
int hd[1000100];
int l[1000100];
int r[1000100];

int main(){
    //freopen("in.txt","r",stdin);
    int T;
    cin>>T;
    while(T--){
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
            cin>>hd[i];
        for(int i=0;i<n;i++)
            cin>>hu[i];
        l[0]=hu[0];
        r[n-1]=hu[n-1];
        for(int i=1;i<n;i++){
            if(hd[i]>=l[i-1])
                l[i]=hd[i];
            else
                l[i]=min(l[i-1],hu[i]);
        }

        for(int i=n-2;i>=0;i--){
            if(hd[i]>=r[i+1])
                r[i]=hd[i];
            else
                r[i]=min(r[i+1],hu[i]);
        }

        int ans=0;
        for(int i=0;i<n;i++)
            ans+=(max(0,min(l[i],r[i])-hd[i]));
        cout<<ans<<endl;
    }
    return 0;
}
View Code

 

Uva 1442

标签:

原文地址:http://www.cnblogs.com/onlyAzha/p/5068455.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!