抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Farmer John 有 ss 只奶牛,和 nn 个独立的篱笆,每个篱笆里可以圈养一些奶牛。出于一种奇♂️怪的偏好,Farmer John 把篱笆排成了一排。第 ii 个篱笆圈养的奶牛数量为 aia_i,显然我们有 i=1nai=s\sum_{i=1}^n a_i=s。而且,处于 Farmer John 的癖好,他要求对于每个 ii 都有 ai>0a_i>0

Bessie 认为一个农场是“幸运的”当且仅当你可以找到一个区间 [l,r][l,r],使得 i=lrai=k\sum_{i=l}^ra_i=k

而得寸进尺的 Bessie 认为一个农场是“牛逼的”当且仅当不管 Farmer John 怎么安置他的奶牛,该农场都是“幸运的”。

现在有 t(1t105)t\,(1\le t\le 10^5) 组询问,每组询问给出 s,ns, nk(1s,n,k1018,ns)k\,(1\le s,n,k\le {10}^{18},\,n\le s),询问这个农场是不是“牛逼的”。

由于是区间问题,我们考虑先将其转换为两点问题。考虑 bi=j=1iaib_i=\sum_{j=1}^i a_i,于是我们有 {b0=0bn=s\begin{cases}b_0=0\\b_n=s\end{cases}。如果存在一对 <i,j>\left<i,j\right> 满足 bjbi=kb_j-b_i=k,那显然这个农场是幸运的。由于 ai>0a_i>0,每一个 bib_i 都是两两不同的。于是问题就转化成了,在 1s1\sim s 中选出 nn 个数,使得这些数中不存在 kk,且不存在一对 <i,j>\left<i,j\right> 满足 ji=kj-i=k

下面我们贪心地考虑最多能选出多少个满足条件的数。

考虑到不能有 kk 这个条件,我们把 kk 的倍数和不是 kk 的倍数的数分开讨论,对于不是 kk 倍数的数,如果我们选了 xx,那我们就不能选 x+kx+k 了(如果 x+ksx+k\le s 的话)。于是我们考虑对每 2k2k 个划分为一段,这样除了最后一段不满的,就有 s2k\left\lfloor\frac{s}{2k}\right\rfloor 段,而每一段我们可以贪心地选择 1k11\sim k-1,这样保证了最后留下的 s mod 2ks\ \mathrm{mod}\ 2k 个数能尽量多取,于是这对于不是 kk 倍数的数,这 s2k\left\lfloor\frac{s}{2k}\right\rfloor 段可以选择 s2k(k1)\left\lfloor\frac{s}{2k}\right\rfloor\cdot(k-1) 个数。然后我们考虑是 kk 倍数,由于不能选择 kk,我们只能选择 2k2k 的倍数。这样这 s2k\left\lfloor\frac{s}{2k}\right\rfloor 段我们就能选取 s2k\left\lfloor\frac{s}{2k}\right\rfloor 个数。于是前 s2k\left\lfloor\frac{s}{2k}\right\rfloor 段一共最多能选取 s2kk\left\lfloor\frac{s}{2k}\right\rfloor\cdot k 个数。

然后我们考虑最后留下的 s mod 2ks\ \mathrm{mod}\ 2k 个数,我们不难发现最多只能选这里面前 k1k-1 个数了(第 kk 个数不能选了是因为我们已经选了原序列中第 ks2kk\cdot \left\lfloor\frac{s}{2k}\right\rfloor 个数了)。因此,这一部分最多能选 min{s mod 2k,k1}\min\left\{s\ \mathrm{mod}\ 2k, k - 1\right\} 个数。

然而上面那段忘记了一个条件,那就是第 ss 个数是必须要选的,因为 bn=sb_n=s。但是大部分情况下这没有关系,因为如果第 ss 个数没有选的话,那我们肯定选择了第 sks-k 个数(因为我们是贪心选最多的,如果第 sks-k 个数和第 ss 个数都不选的话,那就不是最优的了,因为可以选一个使所选数加一),于是我们把第 sks-k 个数删去,选择第 ss 个数即可。唯一的影响在于如果当 s=ks=k 的时候,那既然第 ss 个数一定要选,那么答案就只能是 YES 了。

所以,我们最终只要比较 s2kk+min{s mod 2k,k1}\left\lfloor\frac{s}{2k}\right\rfloor\cdot k+\min\left\{s\ \mathrm{mod}\ 2k, k - 1\right\}nn 的大小即可得出答案。

评论