题目描述 小M在玩游戏王,他正在学习连接召唤的相关规则。
连接召唤的本质可以简单地理解成,根据连接怪兽的link值(卡面右下角的数字),提供总量为对应数量的怪兽作为素材进行特殊召唤的一种方式。特别的,如果有连接怪兽被作为素材,它可以被视作一个普通素材,也可以被视为数量和自己的link值相同的素材怪兽。
举个例子,要召唤一只 LINK-4 的怪兽,素材可以是场上的任意 4 只怪兽( 1+1+1+1=4),或者 2 只 LINK-2 怪兽( 2+2=4),或者 1 只 LINK-3 怪兽以及 1 只 LINK-2 怪兽( 3+1=4,其中 LINK-2 怪兽被作为普通素材)。
现在小M想知道,使用当前场上的怪兽作为素材,有哪些连接怪兽可以被召唤(不会真的消耗素材去召唤)?
输入格式
本题包含多组测试数据。
输入的第一行包含一个正整数 T,表示测试数据的组数。
每组数据第一行两个正整数 n,m,分别表示当前场上的怪兽和准备被召唤的怪兽。
第二行 n 个正整数 a 1 ,a 2 ,…,a n ,表示场上怪兽的link值。
第三行 m 个正整数 b 1 ,b 2 ,…,b m ,表示被召唤怪兽的link值。
输出格式
每组数据输出
m 行,对于每组数据的第
i 行,如果第
i 只怪兽可以被召唤,输出 YES,否则输出 NO
input1
复制代码
1
6 3
8 3 12 7 9 7
24 50 13
output1
复制代码
YES
NO
YES
数据范围
对于
100% 的数据,保证
1⩽T⩽5,
1⩽n,m⩽10的3次方
,
1⩽a
i
,b
i
⩽10 的5次方
。
代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
while (T--)
{
int n, m;
cin >> n >> m;
vector<int> a(n);
vector<int> b(m);
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < m; i++)
cin >> b[i];
int sum = 0;
for (int i = 0; i < n; i++)
sum += a[i];
for (int i = 0; i < m; i++)
{
if (b[i] <= sum)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}
return 0;
}