4.浓缩咖啡液【算法赛】 - 蓝桥云课
问题描述
蓝桥杯备赛选手小蓝最近刷题刷到犯困,决定靠咖啡续命。他手上有 N 种浓缩咖啡液,浓度分别是 A1%, A2%, …, AN%,每种存货都是无限的。为了提神又不炸脑,小蓝需要按比例混合这些浓缩咖啡液,调出一杯浓度为 M% 的咖啡。
举个例子,假设 M=60,N=2,A1=50,A2=70,那么他可以混合 100 毫升的 A1 和 100 毫升的 A2,得到 200 毫升、浓度为 (50%×100)/200=60% 的咖啡。
现在,请你帮小蓝判断,他能不能用这 N 种浓缩咖啡液,调出一杯浓度为 M% 的咖啡?
输入格式
第一行包含一个整数 T(1≤T≤103),表示测试数据的组数。
接下来的每组数据包含两行:
- 第一行包含两个整数 N 和 M(1≤N,M≤100),分别表示浓缩咖啡液的种类数和目标浓度。
- 第二行包含 N 个整数 A1,A2,…,AN(1≤Ai≤100),表示每种浓缩咖啡液的浓度。
输出格式
对于每组测试数据,输出一行,如果可以调出浓度为 M% 的咖啡,输出 YES
,否则输出 NO
。
样例输入
2
1 90
20
2 60
50 70
样例输出
NO
YES
思路:
因为咖啡是无限的,并且稀释后的浓度只能在最大值和最小值之间。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while (T--)
{
int N, M;
cin >> N >> M;
int max_num = -1e9, min_num = 1e9; // 根据题意初始化
for (int i = 0; i < N; ++i)
{
int a;
cin >> a;
max_num = max(max_num, a);
min_num = min(min_num, a);
}
if (M >= min_num && M <= max_num)
{
cout << "YES" << '\n';
}
else
{
cout << "NO" <<'\n';
}
}
return 0;
}