1 条题解
-
0
自动搬运
来自洛谷,原作者为

FuriousC
**搬运于
2025-08-24 22:31:06,当前版本为作者最后更新于2021-05-04 00:23:21,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这题我在比赛中推了30min才推出来结果发现是原题。。。
菜是原罪
先证一下n是4的倍数:
设这个整数分别为,则,
1.数列中有个偶数:
则为个奇数之积,故也为奇数
所以为奇数个奇数之和,必为奇数
与矛盾
2.数列中有个偶数:
则为个奇数与个偶数之积,故为偶数
所以为奇数
所以为奇数个奇数之和再加一个偶数,必为奇数
再次与矛盾
3.数列中有个偶数:
则为个奇数与个偶数之积,故为偶数
所以为偶数
所以为偶数个奇数之和再加两个偶数,必为偶数
不与矛盾
因此,此序列中至少有个偶数,即能被整除
再来看看怎么求出数列:
因为为的倍数,所以设(为正整数)
1.当为奇数时:
验证:
(1).和:
(2).积:
2.当为偶数时:
验证:
(1).和:
(2).积:
代码:
#include<bits/stdc++.h> using namespace std; int main(){ int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); if(n%4==0){ int k=n/4; if(k%2==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 "); } }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"); }else{ printf("w33zAKIOI\n"); } } return 0; } //w33z AK IOI!
- 1
信息
- ID
- 6632
- 时间
- 500ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者