当s<k时,所有盒子衣服加起来都不够k,即输出NO;
当s=k时,所有盒子衣服加起来恰好为k,即输出YES;
当s>k时,考虑如下分配方案,使任意连续盒子内的衣服总数都不为k:
每k个盒子一组,前k-1个盒子只分配1件衣服,第k个盒子分配k+1件衣服
这样任意连续盒子的衣服总数要么至多为k-1,要么至少为k+1
且该方案所需的衣服总数最少
由于每组盒子衣服总数为k-1+k+1=2k,n个盒子可分为n/k组,余下n%k个盒子也都为1件
那么该方案所需衣服总数为sum=(n/k)*2*k+n%k
若s<sum,说明某组中的第k个盒子无法分配到k+1件衣服
那么该盒子与其旁边的若干盒子一定可以组成和为k的连续盒子,即输出YES;
若s=sum,说明上述分配方案恰好存在,即输出NO;
若s>sum,多出来的衣服都可以分配给某组中的第k个盒子,使其衣服数大于k+1,
但仍然满足任意连续盒子的衣服总数不为k,即输出NO
综上,C代码和运行结果如下:
输出符合样例,望采纳~
附源码:
#include <stdio.h>
typedef long long ll;
int main() {
int T, res;
ll s, n, k, sum;
scanf("%d", &T);
while (T--) {
scanf("%lld%lld%lld", &s, &n, &k);
res = 0;
if (s > k) {
sum = (n / k) * 2 * k + n % k;
if (s < sum)
res = 1;
}
else if (s == k)
res = 1;
if (res)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
2022-12-05 广告