杂题题解 1
有解条件
先来证明当且仅当
【#1】 序列中有没有偶数
易得,
由序列中没有偶数知,令
【#2】 序列中只有 个偶数
由
不妨令,
【#3】序列中有超过一个偶数,且偶数个数为奇数
由
不妨令
【#4】序列中有超过一个偶数且偶数个数为偶数
由
不妨令
综上所述,当构造序列中有偶数个偶数,且个数大于
构造方法
令
为奇数:显然序列中存在两个元素 和 ,考虑剩余的元素。此时还有 个元素,由相加为 可知,有 个 和 个 ,同时乘积满足条件。 为偶数:显然序列中存在 和 ,剩余元素为 个 和 个 。
AC 代码
#include<stdio.h>
int n,m;
inline void work(){
scanf("%d",&n);
if(n%4){
putchar('w');
putchar('3');
putchar('3');
putchar('z');
putchar('A');
putchar('K');
putchar('I');
putchar('O');
putchar('I');
putchar('\n');
return;
}m=n>>2;
if(m&1){putchar('2');
putchar(' ');printf("-%d ",m<<1);
for(register int i=1;i<=3*m-2;++i)
putchar('1'),putchar(' ');
for(register int i=1;i<=m;++i)
putchar('-'),putchar('1'),putchar(' ');
}else{putchar('-'),putchar('2');
putchar(' ');printf("-%d ",m<<1);
for(register int i=1;i<=m+(m<<1);++i)
putchar('1'),putchar(' ');
for(register int i=1;i<=m-2;++i)
putchar('-'),putchar('1'),putchar(' ');
}putchar('\n');
}signed main(){
int T;scanf("%d",&T);
while(T--) work();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下