PAT(初級)実践(中文)
発表
PAT元のサイトのユーザーはできる https://patest.cn/bind_old_pat_user タイトルの戦いのアカウントページにバインドされました。結合後、元PATの提出のサイトでは、話題の焦点に対応するWebサイトのユーザーと戦うタイトルに組み込まれます。
1020月餅(25点)
中国の人々は月餅は中秋節では、伝統的な食べ物で食べて、異なる領域が月餅の多くの異なった味を持っています。今月餅の在庫、合計金額、および市場の最大需要のすべての種類を考えると、あなたはどのくらいの計算された最大の利益を得ることができます。
注意:在庫販売の一部を除去することを許可。与えられた事例はこれです:私たちは月餅の3種類を持っている場合は、その株式は、それぞれ75,72,45億、合計金額18,15,10トンでした。最大市場の需要はわずか20億トンであれば、我々は月餅の2種類の15万トンだけでなく、月餅の3種類5万トンの全てを売却する最大の収益戦略である必要があり、72 + 2分の45 = 94.5(百万)を取得。
入力フォーマット:
各入力は、テストを含みます。各テストケースは、正の整数に与えられていない1000以上のNは、Dは、市場の最大需要を表す正の整数の(トン数千単位)月餅の種類数、及び500以下を表します。次いで、N行目所与(トン数千の単位で)各月餅の株式の正の数を表し、Nは、最後の行は、正の数(十億の単位で)各月餅の総販売価格を示し得られます。スペースで区切られた数字の間。
出力フォーマット:
各試験、出力ラインで、数十億の単位でかつ正確に小数点以下の最大の利益のために。
サンプル入力:
3 20
18 15 10
75 72 45
出力例:
94.50
アイデア:
コストによってソートされた各コストの月餅、貪欲な選択を計算します。
#include<iostream>
#include<algorithm>
using namespace std;
struct Node{
double a;
double b;
double p;
}a[1009];
int cmp( struct Node a ,struct Node b ){
return a.p > b.p;
}
int main(void){
int N,M;
double ans;
while( scanf("%d%d",&N,&M) !=EOF){
for( int i=0;i < N;i++){
scanf("%lf",&a[i].a);
}
for( int i=0;i < N;i++){
scanf("%lf",&a[i].b);
a[i].p = a[i].b/a[i].a;
}
ans = 0;
sort(a,a+N,cmp);
for( int i=0;i<N;i++){
if( M >a[i].a ){
ans = ans+ a[i].b;
M-=a[i].a;
}
else if( M == a[i].a ){
ans = ans+ a[i].b;
M-=a[i].a;
break;
}
else if (M < a[i].a ){
ans = ans+ a[i].p*M;
M=0;
break;
}
}
printf("%0.2lf\n",ans);
}
return 0;
}