简要题意:
多组数据,问能否把 分为 个 不同的 正奇数之和。
盲猜数学结论题。
只要考虑两个问题:
-
的大小是否足够。
-
的奇偶性是否满足。
对于第 条,最小的 个 不同的 正奇数之和为 .(这都不知道,建议重学小学数学)
所以, 才可能有解。
对于第 条,因为 个正奇数与 的奇偶性相同,所以必须满足:
这两条同时满足即有解,否则无解。
为什么呢?
考虑一种拆分:
即前 个正奇数加上另一个奇数。
如果 同时满足上两条,则显然存在这样的拆分,且 ,也不存在重复。
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
ll x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}
int main(){
ll T=read(),n,k; while(T--) {
n=read(),k=read();
if(n<k*k || (n-k)&1) puts("NO");
else puts("YES");
} //别忘了,k*k会爆int,开上 long long
return 0;
}