CF1779B

· · 题解

通过观察发现只有n = 3时不成立,然后我们进行分析,发现偶数的其实是非常好想的,只要我们一直交替1-1最后就会得到一个正确的答案;对于奇数的情况,我们考虑相邻两个的和,相邻两个的和如果是x,那么总的的和也应当是x,所以前面的n-1个数的和应当是\lfloor \frac {nx}{2}\rfloor,最后一个数应当是x - (\lfloor \frac{n}{2} \rfloor * x),那答案就呼之欲出了,即重复\lfloor \frac{(2-n)x}{2} \rfloor\lfloor \frac{nx}{2} \rfloor,然后我们只需要钦定x = 1就好了,记得向下取整。(其实通过这个也发现了,如果n=3就会导致\lfloor \frac{2-n}{2} \rfloor变成了0,但是随着n增大这种情况并不会再出现)

码: 点击这里查看缺省源

void solve() {
    read(n);
    if(n == 3) vreturn puts("NO");
    puts("YES");
    if(n & 1){
        int a = (2-n)/2 , b = n/2;
        rep(i ,1 ,n/2){write(a , b);}
        write_(a);
        return ;
    }else{
        rep(i ,1 , n/2){
            printf("1 -1 ");
        }
        vreturn puts("");
    }
    end:
    {}
    return ;
}