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

WYXkk
Zzz Zzz搬运于
2025-08-24 22:19:01,当前版本为作者最后更新于2020-03-18 19:09:38,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
upd:修改了一处笔误,感谢 TheShadow 指出。请管理重新审核。
:看样例输出。
:正常的爆搜应该能过。(当然你爆搜写的是假的(指正确性)就过不了)
:
爆搜找规律数学推导。我们来分情况讨论。
:取一个 , 个 , 个 即可。
:假设可以,设 是 的一个「良好的分拆」。既然 ,那么 中必定恰好有一个偶数,再根据 ,可得 个奇数和一个偶数的和是偶数,不可能。故此时 没有「良好的分拆」。
:假设可以,设 是 的一个「良好的分拆」。既然 ,那么 中必定有奇数个 型数和偶数个 型数。无论是有 个 型数和 个 型数,还是有 个 型数和 个 型数,其和都不是 型数。故此时 没有「良好的分拆」。
:要分类讨论。
- :没有,读者自证不难(
- :一个 ,一个 , 个 , 个 。
- :一个 ,一个 , 个 , 个 。
按照上面的方式构造即可。
(很好奇比赛的时候有没有人找规律找出来
#include<cstdio> #include<iostream> #include<fstream> #include<cmath> #include<cstring> #include<algorithm> using namespace std; #define Set(a) memset(a,0,sizeof(a)) #define F(i,a,b) for(register int i=a,i##end=b;i<=i##end;++i) #define UF(i,a,b) for(register int i=a,i##end=b;i>=i##end;--i) #define openf(a) freopen(#a".in","r",stdin);freopen(#a".out","w",stdout) #define re register #define ri re int #define il inline typedef long long ll; typedef unsigned long long ull; template<typename T> inline T rd(T& x) { T f=1;x=0;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(T)(c-'0'); x*=f; return x; } ll rd(){ll x;rd(x);return x;} inline int max(int a,int b){return a>b?a:b;} inline int min(int a,int b){return a<b?a:b;} const int inf=1<<30; void out(int n) { if(n%4==1) { puts("YES"); if(n==1) printf("1\n1 1\n"); else printf("3\n1 %d\n%d 1\n%d -1\n",n,n/2,n/2); } else if(n%4==2) puts("NO"); else if(n%4==3) puts("NO"); else { if(n%8==0) { puts("YES"); printf("4\n1 %d\n1 2\n%d 1\n%d -1\n",n/2,n-n/4-2,n/4); } else { if(n==4) puts("NO"); else { puts("YES"); printf("4\n1 %d\n1 -2\n%d -1\n%d 1\n",n/2,n/4-2,n-n/4); } } } } int main() { int T=rd(); while(T--) out(rd()); return 0; }
- 1
信息
- ID
- 5225
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者