题目描述:原题链接
思路:
因为前k个不同奇数的和是(k* k),所以如果n小于k^2就说明太小了返回否。因为从一个奇数变为另一个奇数只会让和改变2的倍数,所以(n-k*k)只要是2的倍数即可。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
typedef long long ll;
const int N=10000010;
ll n,k;
int main()
{
int T;cin>>T;
while(T--)
{
cin>>n>>k;
ll d=n-k*k;
puts(d<0||d%2==1?"NO":"YES");
}
return 0;
}