Description 小洪的老师想用奖品来调动学生参加某项智力比拼活动的积极性,奖品有一个初始的吸引值 L(1 <= L <= 50)。已知每一个学生都有一个抵抗诱惑的值ri(0 <= ri<=100),只有奖品的吸引值大于或者等于学生的抵抗诱惑值时,这个学生才会积极参加这个项活动。随着活动的开展,每当有一名学生积极参加这项活动时,会使这个奖品的吸引值增加 k (1 <= k<= 20),从而可能使得先前不够积极的同学抵挡不住诱惑从而参与进来。现在小洪的班中共有 n (1 <=n<= 1000) 位同学,小洪想请你帮忙统计出最终会积极参加这项活动的最大人数。 Input 第一行三个整数 n、L、k,分别代表小洪班人数、奖品初始吸引值和每增一人参与活动时奖品吸引值的增加值。第二行:n 个整数,代表每个学生的抵抗诱惑的值。 Output 一个整数,代表最后有多少学生参加这项活动。 Sample Input 5 2 3 2 6 12 5 14 Sample Output 3 HINT 【样例解释】:奖品的初始吸引值是 2,那么只有第一位学生(2<=2)参加这项活动,因为有一位学生参加活动,那么奖品的吸引力就增加为:2+3=5,刚好第四位学生抵抗诱惑值为 5,那么第四位同学也参加这项活动,奖品的吸引力变为:5+3=8,这样只有第二位学生的诱惑值 6<8,那么第 2 位学生也参加活动,使奖品吸引力变为:8+3=11,最后再也没有学生的诱惑值小于等于 11,这样就只有 3 位学生参加这项活动。
和上一题(合照)很类似
#include <iostream> #define SIZE 15000 using namespace std; int a[SIZE]; bool v[SIZE]; int main(int argc, char** argv) { int n, i, t = 0, l, k; bool flag; cin >> n >> l >> k; for (i = 1; i <= n; i++) { cin >> a[i]; } for ( ; ; ) { flag = true; for (i = 1; i <= n; i++) { if ((!v[i]) && (l >= a[i])) { t++; v[i] = true; flag = false; l += k; } } if (flag) { cout << t << endl; return 0; } } return 0; }