排座位
题号:NC25743
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

郭嘉烜有一间特殊的教室,这间教室里只有一排座位。郭嘉烜需要安排n个人在这间教室中考试,因此他需要排出他们的座位。

我们知道所有同学上一次考试的成绩,要求相邻的m个人上一次考试成绩之和不能超过s,否则这个座位方案就是无效的。

每个人的成绩都是一个不超过100的整数,我们会给出若干个分配座位的方案,给出方案的形式是n个不超过100的整数来代表对应座位上同学上一次的考试成绩。

为简化输入,我们将使用如下代码生成数据。你可以直接拷贝以下代码,在每个样例中将此函数调用n次以生成成绩数据。

int seed, offset, mask;

int generate() {

         seed = (seed << offset) ^ mask;

         mask ^= seed >> offset;

         seed = (seed >> (offset / 2) ^ mask);

         return abs(seed % 100);

}

输入描述:

第一行,三个整数,n,m,s
第二行,一个整数p,表示样例的个数

接下来的p行,每行三个整数,seed,offset,mask,作为生成数据的种子

输出描述:

p行,每行根据对应样例是否是有效的排座方案,有效输出YES,无效输出NO。
示例1

输入

复制
10 5 256
1
520 1 314

输出

复制
YES

备注:

1 ≤m≤n≤105,s≤109,1 ≤p≤20