ARC163C 典中典之猪猪吃答辩与裂项模型
书接上回。
有一个模型叫做猪猪吃答辩,就是说猪猪在吃饭的时候啊,会把答辩切碎然后搅匀再吃,所以我们这次依然可以考虑这件事情。
我们先把答辩拆开:
这样构造大多数情况下都是正确的,除了
于是我们考虑拼起来:由于
但这又有个问题,存在某个
智慧的猪猪打表发现
void solve() {
n = rd();
int t = sqrt(n);
if (t * (t + 1) == n) {
if (n == 2) {
puts("No");
return;
}
puts("Yes");
if (n == 12) {
puts("2 4 12 20 30 42 56 72 90 110 396 198");
return;
}
if (n == 420) {
for (int i = n - 2; i; i--) {
if (i == 5) continue;
wr(i * i + i), pc(' ');
}
wr(28), pc(' '), wr(3 * n * (n - 1)), pc(' '), wr(3 * n * (n - 1) / 2), pc('\n');
return;
}
for (int i = n - 2; i; i--) {
if (i == t) continue;
wr(i * (i + 1)), pc(' ');
}
wr(n / 2), pc(' '), wr(3 * n * (n - 1)), pc(' '), wr(3 * n * (n - 1) / 2), pc('\n');
return;
}
puts("Yes");
for (int i = 1; i <= n - 1; i++) {
wr(i * (i + 1)), pc(' ');
}
wr(n), puts("");
}
signed main() {
int T = rd();
while (T--) solve();
return 0;
}