1327A Sum of Odd Integers(思维)
题意:有 T T T 个询问,每个询问给出两个整数 n n n 和 k k k,问 n n n 是否能够用 k k k 个不同正奇数之和。
范围: 1 ≤ T ≤ 1 0 5 , 1 ≤ n , k ≤ 1 0 7 1 \le T \le 10^5~,~1 \le n, k \le 10^7 1≤T≤105 , 1≤n,k≤107
分析:已知 k k k 个不同正奇数可以表示的最小数字是 1 + 3 + 5 + . . . + 2 k − 1 = k 2 1+3+5+...+2k-1 = k^2 1+3+5+...+2k−1=k2, 之后可以改变其中任意一个数字就可以得到 k 2 + 2 , k 2 + 4 , . . . k 2 + 2 m k^2+2,k^2+4,...k^2+2m k2+2,k2+4,...k2+2m,因此我们只需要判断 n ≥ k 2 n \ge k^2 n≥k2 且 n n n 和 k k k 的奇偶性相同即可。
Code:
#include <bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
// const int MAXN =
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double eps = 1e-9;
const double PI = acos(-1.0);
int n;
inline int read()
{
int s = 0, w = 1;
char ch = getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-')
w = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
s = s * 10 + ch - '0', ch = getchar();
return s * w;
}
signed main()
{
int T = read();
while (T--)
{
int a, b;
cin >> a >> b;
if (a >= b * b && a % 2 == b % 2)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
return 0;
}
【END】感谢观看