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;
}