首先判断无解,容易发现 \(n\bmod 4 = 0\),证明如下:
如果 \(n\) 为奇数,则序列中所有数皆为奇数,于是和为奇数,矛盾,故 \(n\bmod 2 = 0\)。
设 \(n = 2k\),易知序列中至少有 \(1\) 个偶数,设其为 \(2p\)。
假如剩余的 \(2k-1\) 个数都是奇数,那么和为 \(2k-1\) 个奇数加 \(2p\),为奇数,矛盾,故至少有 \(2\) 个偶数。
\(\therefore n\bmod 4 = 0\)。
接着考虑构造,我们发现可以巧用 \(1, -1\) 来抵消。
令 \(q\) = \(\frac{n}{4}\):
\(q \bmod 2 = 0\):
\(q \bmod 2 = 1\):
#include <bits/stdc++.h>
using namespace std;
int T, n, k;
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
if (n%4 != 0) {
printf("w33zAKIOI\n");
continue;
}
k = n/4;
if (k & 1) {
printf("2 -%d ", k*2);
for (int i = 1; i <= 3*k-2; i++)
printf("1 ");
for (int i = 1; i <= k; i++)
printf("-1 ");
printf("\n");
} else {
printf("-2 -%d ", k*2);
for (int i = 1; i <= 3*k; i++)
printf("1 ");
for (int i = 1; i <= k-2; i++)
printf("-1 ");
printf("\n");
}
}
return 0;
}
原文:https://www.cnblogs.com/SparkleZH-Blog/p/14729689.html