王阿姨洗完衣服后,通常的做法是在晾衣杆上自然晾干,假如晾晒的衣服在自然条件下1个单位的时间可以晒干A点湿度。为了加快晾晒速度,王阿姨买了1台烤干机,使用烤干机可以用1个单位的时间使1件衣服除开自然晒干的A点湿度外,还可再烘干B点湿度,但该烤干机在1个单位的时间内只能对1件衣服使用。因为种种原因N件衣服不一样湿,现在告诉你每件衣服的湿度,要你求出烘干所有衣服的最少时间(湿度为0为干)。
第一行N,A,B;接下来N行,每行一个数,表示衣服的湿度;
1 ≤ 湿度,A,B≤ 500000,1 ≤ N ≤ 500000。
一行一个整数,表示最少时间。
```c
#include<stdio.h>
void sort( int va[], int n);
int num[10000000] = {0};
int main()
{
int N, A, B;
scanf("%d%d%d", &N, &A, &B);
int i, j, k, n;
for(i = 0; i < N; i++)//保存N个数到数组中
{
scanf("%d", &num[i]);
}
for(n = 0; N != 0; n++)//n表示经过的时间
{
sort(num, N);//对num数组的前N位从小到大排列
for(i = 0; i < N; i++)//晒干后剩余湿度
num[i] -= A;
for(i = 0; num[i] <= 0 && i < N; i++);//判断num数组中已经晒干的个数
if(i != N)//如果没有全部晒干
{
if(num[N - 1] <= B)//如果湿度最大的刚好被烘干在这一轮可以直接烘干
N = N - i - 1;//N减去这一轮已经晒干的,再减去最大湿度被烘干
else
{
num[N - 1] -= B;
N = N - i;
}
for(j = 0; j < N; j++)//将还未被烘干的衣服的序号往前挪到数组开始
{
num[j] = num[j + i];
}
}
else//当全部被晒干的时候
{
n++;
break;
}
}
printf("%d", n );
return 0;
}
void sort(int va[], int n)//冒泡排序法排列
{
int i, j, k, temp;
for(i = 0; i < n -1; i++)
{
j = 0;
for(k = 0; k < n - i - 1; k++)
{
if(va[k] > va[k + 1])
{
temp = va[k];
va[k] = va[k + 1];
va[k + 1] = va[k];
j = 1;
}
}
if( j == 0)
break;
}
}