質問の意味簡単に言えば:
データの複数のセットは、かどうかを尋ねた\(N- \)に\(K \)番目の異なる正の奇数の和。
ブラインドは、結論の数学の問題を推測します。
限り、二つの問題が検討すると:
-
\(N \)サイズが適切です。
-
\(N \)パリティを満たしています。
最初のために\(1 \)ストリップ、最小\(K \)異なるの正の奇数合計\(K ^ 2 \) 。(それは知りません、初等数学を再学習を提案しています)
だから、\(N- \ GEQのk ^ 2 \)それが解けるかもしれません。
最初のため\(2 \)物品ため\(K \)正の奇数と(K \)\同じパリティの、それが満たされなければなりません。
\ [N \当量のK \ PMOD 2 \]
ソリューション、または全く解決策である2つの会います。
なぜ?
分割を検討します。
\ [1 + 3 + 5 + ... +(2K-3)+ P = N \]
すなわち、前に\(K-1 \)正の奇数プラス別の奇数。
もし\(N- \) 2を満足しつつ、それは分割があることは明らかであり、そして(\ KタイムズP \ GEQ 2 - 1 \)\、何繰り返しが存在しません。
#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;
}