题意:
让你构造一个长度为 n n n 的序列,并且 n n n 个数的和为 S S S,问能不能找到一个 1 − n 1-n 1−n 的数 k k k,使得数组里找不出一个子序列的和为 k k k 或者 n − k n-k n−k;
让 k = 1 k=1 k=1,然后数组只要不出现 1 1 1 和 n − 1 n-1 n−1 就好了,只要 s > = 2 ∗ n s >= 2*n s>=2∗n,也就是由 n − 1 n-1 n−1 个 2 2 2 和一个 s − ( n − 1 ) ∗ 2 ! = 1 s-(n-1)*2 != 1 s−(n−1)∗2!=1 构成就可以。
AC代码:
int n, s, k;
int main()
{
int t;
sdd(n, s);
if (s < n * 2)
puts("No");
else
{
puts("YES");
rep(i, 1, n - 1)
printf("2 ");
pd(s - 2 * (n - 1));
puts("1");
}
return 0;
}