1. 程式人生 > >洛谷P1843 奶牛晒衣服

洛谷P1843 奶牛晒衣服

題目背景

熊大媽決定給每個牛寶寶都穿上可愛的嬰兒裝 。 於是 , 為牛寶寶洗晒衣

服就成了很不爽的事情。

題目描述

熊大媽請你幫助完成這個重任 。 洗完衣服後 , 你就要弄乾衣服 。 衣服在

自然條件下用 1 的時間可以晒乾 A 點溼度 。 摳門的熊大媽買了 1 臺烘衣機 。

使用烘衣機可以讓你用 1 的時間使 1 件衣服除了自然晒乾 A 點溼度外,還

可以烘乾 B 點溼度,但在 1 的時間內只能對 1 件衣服使用。

N 件衣服因為種種原因而不一樣溼 , 現在告訴你每件衣服的溼度 , 要你

求出弄乾所有衣服的最少時間(溼度為 0 為幹 ) 。

輸入輸出格式

輸入格式:

第一行 N , A , B ;接下來 N 行,每行一個數,表示衣服的溼度( 1 ≤ 溼

度, A , B ≤ 500000 , 1 ≤ N ≤ 500000 ) 。

輸出格式:

一行,弄乾所有衣服的最少時間。

輸入輸出樣例

輸入樣例#1: 

3 2 1
1
2
3
輸出樣例#1: 
1
說明

第 1 個時間內,用機器處理第 3 件衣服,此外,所有衣服自然晒乾 。 花

費 1 時間全部弄乾。

我來水部落格啦

這道題是一個神奇的貪心

就每次烘乾最溼的一件衣服就行了

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,a,b,t = 0;
int f[500003];
int main()
{
	scanf("%d%d%d",&n,&a,&b);
	for(int i = 1;i <= n;i++)
	{
		int x;
		scanf("%d",&x);
		f[x]++;
		t = max(t,x);
	}
	int ans = 0;
	while(a * ans < t)//如果現在的時間足夠烘乾最溼的衣服,那就可以烘乾所有衣服 
	{
		ans++;
		f[t]--;
		if(t - b > 0)f[t - b]++;
		while(f[t] == 0)t--;//找最溼的衣服 
	}
	printf("%d\n",ans);
	return 0;
}