题解:P14477 图寻中国

· · 题解

这里有一种简单的构造方法。

为了让 0 这种分隔符能起到最大作用,我们应该让每个 0 的两侧尽量都有 1,于是便有了下面的构造方法。

我们以 a1 作为一整段,先写一整段,再加 b0,接着再加若干段,每段之间加一个 0,最后如果还有剩下的,直接加若干个 1 填充即可。

代码:

cin>>n>>a>>b;
int k=a+b,ans=a;//当前总数,1的数量
while(k<n)
{
    if(k+a<n)k+=a+1,ans+=a;
    else if(k+a==n){k+=a,ans+=a;break;}
    else {ans+=n-k;break;}
}