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 */