cogs 1435. [USACO NOV]金發姑娘和N頭牛
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;View Codeint 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 */
cogs 1435. [USACO NOV]金發姑娘和N頭牛