ABC161B Popular Vote
Popular Vote
题目大意:有 \(n\) 件商品进行了满意调查,商品 \(i\) 有 \(a_i\) 票,现在要选出 \(m\) 件商品去销售,要求这 \(m\) 件商品每件的票数不能小于总票数的 \(\frac{1}{4m}\) ,问能否选出 \(m\) 件商品进行销售,如果可以,输出 Yes
,否则输出 No
。
这题的话数据不大,直接读入后遍历一遍就行了。
#include <bits/stdc++.h>
using namespace std;
inline long long read(){ //快读
long long s = 0, w = 1;
char ch = getchar();
while (ch < '0' || ch > '9'){
if (ch == '-') w = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9'){
s = s * 10 + ch - '0';
ch = getchar();
}
return s * w;
}
bool cmp(int x, int y){ //sort中从大到小排序的参数,不解释了。
return x > y;
}
long long n, m, a[111], sum; //定义数据,n,m,a见题,sum记录总和
int main(){
n = read(), m = read();
for (int i = 1; i <= n; i++){
a[i] = read();
sum += a[i]; //计算票数总和。
}
sort (a+1, a+n+1, cmp); //对a数组进行从大到小的排序,因为买商品肯定是先买票数高的。
double k = sum / 4.0 / m; //计算总票数的1/4m
for (int i = 1; i <= m; i++){
if (a[i] < k){ //由于a是从大到小排序,所以如果这个商品不符合,那么后面的商品也一定不符合
cout << "No" << endl;
return 0; //直接结束程序,理由如上
}
}
cout << "Yes" << endl; //如果程序没有提前结束,就证明满足条件
return 0;
}