先给结论:记 \(S=1+2+\dots+k\),则当 \(N\ge S\) 时为 YES
,当 \(N<S\) 时为 NO
。
严谨一点,证明如下:
若能成功分配饼干,记 \(k\) 名小朋友拿到的饼干数量分别为 \(a_1,a_2,\dots,a_k\)。由于饼干数量各不相同且均为整数,不妨设 \(a_1<a_2<\dots<a_k\),则 \(a_2\ge a_1+1,a_3\ge a_2+1,\dots,a_k\ge a_{k-1}+1\)。由饼干数量至少为 \(1\) 得 \(a_1\ge 1\),所以 \(a_2\ge a_1+1\ge 2,a_3\ge 3.\dots,a_k\ge k\),不等式相加即得 \(a_1+a_2+\dots+a_k=N\ge 1+2+\dots+k=S\)。充分性得证。
若 \(a_1+a_2+\dots+a_k=N\ge 1+2+\dots+k=S\),则一定存在这样一组解:
\[a_i=\begin{cases}k+N-S&&i=k\\k&&0<i<k\end{cases} \]该解满足题目要求。必要性得证。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll T, N, k, S;
int main(void) {
cin >> T;
while (T--) {
cin >> N >> k;
S = (1+k) * k / 2; // 等差数列求和公式
if (N >= S) cout << "Yes\n";
else cout << "No\n";
}
return 0;
}
标签:dots,P1749,19,题解,ll,long,ge,饼干
From: https://www.cnblogs.com/uxod/p/17991383/p1749-solution