K. Road Widening

\(考虑每个区域可行的区间\)

\(x[1]=s[1]\ \ y[1]=s[1]+g[1]\)

\(x[i]=max(x[i-1]-1,s[i]),y[i]=min(y[i-1]+1,s[i]+g[i])\)

\(然后这样能确保每一个区间都满足前面的区间,但不意味前面的区间满足后面的区间\)

\(倒过来也做一次,之后对每个都取y[i]\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2000005;
ll x[maxn],y[maxn],s[maxn],g[maxn],flag=1;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)    cin>>s[i]>>g[i];
    x[1]=s[1],y[1]=s[1]+g[1];
    for(int i=2;i<=n;i++)
    {
        x[i]=max(x[i-1]-1,s[i]);
        y[i]=min(y[i-1]+1,s[i]+g[i]);
        if(x[i]>y[i])    flag=0;
    }
    for(int i=n-1;i>=1;i--)
    {
        x[i]=max(x[i+1]-1,x[i]);
        y[i]=min(y[i+1]+1,y[i]);
        if(x[i]>y[i])    flag=0;
    }
    ll ans=0;
    for(int i=1;i<=n;i++)    ans+=y[i]-s[i];
    if(flag==0) cout<<-1;
    else
    {
        cout<<ans<<endl;
        for(int i=1;i<=n;i++)    cout<<y[i]<<" ";
    }
}

原文链接: https://www.cnblogs.com/iss-ue/p/12831393.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    K. Road Widening

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/346510

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午3:56
下一篇 2023年3月2日 上午3:56

相关推荐