2848: 小轩的衣服

题目描述

小轩不仅是个大学霸,而且还是个非常会穿搭的男神,所以小轩的衣服非常多,有一天小轩在收拾衣服时想到了一个问题,他有s件衣服,但却只有n个盒子,他要用这n个盒子去装这s件衣服,且每个盒子最少有1件衣服,他想考考你,是否对于所有的分配方案,每个方案都可以找到若干个连续的盒子,将这些盒子里的衣服全部装入小豪的一个大盒子里,使这个大盒子里的衣服的数量为k件。如果可以,请输出YES,否则输出NO。

输入

第一行一个T,表示样例数(1<=T<=1e5)
对于每个样例,每一行输入三个整数,s,n,k分别表示衣服的总数量,盒子的总个数,和选取若干个连续的盒子中衣服的总数量 。
( 1<= s , n , k  <=  1e18  且 n <= s)

输出

对于每个样例,如果可以请输出YES,否则请输出NO。

样例输入 Copy

3
1 1 1
1 1 2
100 50 200

样例输出 Copy

YES
NO
NO

这道题剧难理解,所以打算写个题解

当s==k时,不管怎么分,都有一种方法,能找到n个连续的盒子,满足k;

当s<k时,不管怎么分,都不满足;

当s>k时,又要分类讨论{

在看一遍题目要求

说每个配装方案都可以找到,也就是说我们只要找出一个配装方案不符合,就可以输出NO

将题目理解为,是否存在一个配装方案使条件不成立

我们可以假设一个序列,有n项,序列之和为s,使得任意连续区间[L,R]之和不等于k

我们先自己定义一个任意区间都不为k的函数,

令前(k-1)项都为1,第k项为k+1。

然后定义一个sum,令sum=(n/k)*2k+n%k.

如果s=sum,那么存在一种配装方案,不满足条件

如果s<sum,就无法构成该序列,即任意解满足条件

如果s>sum,将s分成sum和s-sum,将s-sum加到第k项上,仍然存在一项不满足条件

}

那我们就可以写代码了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值