1. 程式人生 > >cogs 1435. [USACO NOV]金發姑娘和N頭牛

cogs 1435. [USACO NOV]金發姑娘和N頭牛

int 輸出 設定 感到 pla 溫度 必須 時間 mil

1435. [USACO NOV]金發姑娘和N頭牛

★★☆ 輸入文件:milktemp.in 輸出文件:milktemp.out 簡單對比
時間限制:1 s 內存限制:256 MB

【題目描述】

你可能已經聽說了金發姑娘和3只熊的經典故事。

鮮為人知的是,金發姑娘最終經營了一個農場。在她的農場,她有一個谷倉含N頭奶牛(1<=N <= 20000)。不幸的是,她的奶牛對溫度相當敏感。

第i頭奶牛必須在指定的溫度範圍內A(i)..B(i)才感覺舒適;(0<=A(i)<=B(i)<= 1,000,000,000)。如果金發姑娘在谷倉放置一個溫控器;如果溫度T<A(i),牛會太冷,並將產生x單位牛奶。如果她把恒溫器調到(A(i)<=T<=B(i))這個範圍內,那麽牛會感到舒適,並將產生Y單位牛奶。如果她把恒溫器調到溫度T>B(i),牛會感覺很熱,並將產生的Z單位牛奶。正如預期的那樣,Y的值總是大於X和Z。

給定的X,Y,和Z,以及每個牛的溫度的最佳範圍,如果金發姑娘設置谷倉的溫控器最佳,請計算金發姑娘得到牛奶的最大數量,已知X,Y和Z都是整數,範圍0..1000。溫控器可以設置為任意整數的值。

【輸入格式】

第1行:四個用空格隔開的整數:N X Y Z。

第2行..1 + N:行1+i包含兩個用空格隔開的整數:A(i)和B(i)。

【輸出格式】

1行:金發姑娘最多可以獲得的牛奶,當她在谷倉的最佳溫度設定。

【樣例輸入】

4 7 9 6 5 8 3 4 13 20 7 10

【樣例輸出】

31

【提示】

在農場裏有4頭奶牛,溫度範圍5..8,3..4,13..20,10..7。一個寒冷的奶牛生產7單位的牛奶,一個舒適的奶牛生產9個單位的牛奶,一個熱牛生產6單位牛奶。

【數據規模】

50%的測試數據:n<=5

其余50%的測試數據:10000<n<=20000.

【來源】

USACO 2013 November Contest, Bronze

translate by cqw

data from cstdio

技術分享圖片
/*最優溫度一定在邊界處取得,然後枚舉就可以了*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,x,y,z,ans;
int num1[20010],num2[20010]; int main(){ freopen("milktemp.in","r",stdin); freopen("milktemp.out","w",stdout); scanf("%d%d%d%d",&n,&x,&y,&z); for(int i=1;i<=n;i++) scanf("%d%d",&num2[i],&num1[i]); sort(num1+1,num1+1+n); sort(num2+1,num2+1+n); for(int i=1;i<=n;i++){ int tmp1=upper_bound(num2+1,num2+1+n,num1[i])-num2;//最小值大於 受冷 int tmp2=lower_bound(num1+1,num1+1+n,num1[i])-num1-1;//最大值小於 受熱 if(tmp2>n) tmp2=0; if(tmp1>n) ans=max(ans,tmp2*z+(n-tmp2)*y); else ans=max(ans,tmp2*z+(n-tmp1+1)*x+(tmp1-tmp2-1)*y); tmp1=upper_bound(num2+1,num2+1+n,num2[i])-num2;//最小值大於 受冷 tmp2=lower_bound(num1+1,num1+1+n,num2[i])-num1-1;//最大值小於 受熱 if(tmp2>n) tmp2=0; if(tmp1>n) ans=max(ans,tmp2*z+(n-tmp2)*y); else ans=max(ans,tmp2*z+(n-tmp1+1)*x+(tmp1-tmp2-1)*y); } cout<<ans; } /* 4 787 993 302 24514 27256 28276 28702 13708 19182 19192 30394 */
View Code

cogs 1435. [USACO NOV]金發姑娘和N頭牛