小 Q 新买了一些橘子,每个橘子都有一个重量,但是小 Q 的强迫症使得她希望这些橘子的重量之和恰好为 s 。 为此小 Q 可以进行若干次“筛选”(也可以不进行) 每次”筛选“包含以下两个步骤: 1.计算现有橘子重量的平均数并且向下取整,记为 avg 2.选择抛弃所有重量大于 avg 的橘子或者抛弃所有重量小于等于 avg 的橘子
第一行输入两个正整数 n,q 第二行输入 n 个正整数,第 i 个正整数表示第 i 个橘子的重量 a_i 接下来 q 行表示 q 次询问,每行一个正整数 s 。 1 ≤ n,q≤ 10^5,1 ≤ a_i≤10^9,1 ≤ s≤10^9
对于每次询问,判断能否通过若干次“筛选”(可能0次),使得些橘子的重量之和恰好为 s 。 若能输出YES,否则输出NO
5 3 7 2 1 6 5 3 21 30
YES YES NO
考点:模拟
数据规模 n ≤ 1e5 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:模拟
本题切入点
每次筛选的结果只取决于当前集合的平均数,状态数很小;把所有可能达到的总和预先算出来放进集合,询问时 O(1) 判断。
不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。
思路框架(模拟 通法 · 非本题专属)
实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。
复杂度:时间 O(操作次数) | 空间 O(状态数)
该范式的通法易错点
对照本题
样例 1:输入 5 3 / 7 2 1 6 5 / 3 / 21 / 30 → 输出 YES / YES / NO
对于第一个询问,可以执行一次筛选操作:avg=4,抛弃大于avg的橘子,剩下的橘子为 2 1 恰好和为3,输出YES
对于第二个询问,可以执行零次筛选操作,和为7+2+1+6+5=21,输出YES
对于第三个询问,显然无法办到,所以输出NO
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:【2023】贝壳找房春招Java工程师笔试卷2;【2023】贝壳找房春招C++工程师笔试卷2;【2023】贝壳找房春招数据挖掘/机器学习工程师笔试卷2。