题意
- 给出 T 组数据,询问每组数据是否能够被若干个 2020 与若干个 2021 相加组成。
思路
对于题意的一种想法为
num=k1×2020+k2×2021⇒num=(k1+k2)×2021−k1
则对于给定的数 num 如果有方案使得其能够由 k1×2020+k2×2021 构成,满足:
- 对于超过 num 的与其差最小的 (k1+k2)×2021 的差,记为 Δ=(k1+k2)×2021−num ,则 Δ≤(k1+k2)
于是我们进行判断,符合条件输出 YES
,否则输出 NO
即可。
code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <cmath> #include <iostream> using namespace std;
int T = 0;
inline void solve(const int num) { int delta = ceil(num * 1.0 / 2021) * 2021 - num;
if (delta <= ceil(num * 1.0 / 2021)) { cout << "YES" << endl; } else { cout << "NO" << endl; } }
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin >> T;
for (int i = 1, tmp; i <= T; ++i) { cin >> tmp; solve(tmp); }
return 0; }
|