PATグレードA 1070ムーンケーキ(25ポイント)| C ++実装

1.タイトルの説明

元のタイトルリンク
ここに画像の説明を挿入

入力仕様:

ここに画像の説明を挿入

出力仕様:

ここに画像の説明を挿入

入力例:

200 3
180 150 100
7.5 7.2 4.5

出力例:

9.45

2、問題解決のアイデア

貪欲に考えて、最大の利益を得るために、私たちは常に最も高い単価で月餅を販売し、次に販売後に2番目に高い月餅を購入します。構造体を使用して、月額ケーキを表すことができます。これには、単価、合計価格、および数量が含まれます。単価は、合計価格を数量で割ることで取得できます。構造体配列は、単価の大きいものから小さいものへと並べ替えられ、順にトラバースされます。数量はタイトルに到達します。数値を指定する場合は、ループを終了して答えを出力します。

3、ACコード

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1010;
struct Mooncake
{
    
    
  double single, price;
	double num;
}mooncake[maxn];
bool cmp(Mooncake a, Mooncake b)
{
    
    return a.single > b.single;}
int main()
{
    
    
  int N, D, cnt = 0;
  double profit = 0;
  scanf("%d%d", &N, &D);
  for(int i=0; i<N; i++)
    scanf("%lf", &mooncake[i].num);
  for(int i=0; i<N; i++)
  {
    
    
    scanf("%lf", &mooncake[i].price);
    mooncake[i].single = mooncake[i].price/mooncake[i].num;
  }
  sort(mooncake, mooncake+N, cmp);
  int now = 0;
  while(cnt < D && now < N)
  {
    
    
    if(mooncake[now].num + cnt <= D)
    {
    
    
      cnt += mooncake[now].num;
      profit += mooncake[now].price;
    }
    else
    {
    
    
      profit += mooncake[now].single * (D-cnt);
      cnt = D;
    }
    now++;
  }
  printf("%0.2f", profit);
  return 0;
}

おすすめ

転載: blog.csdn.net/weixin_42393947/article/details/108707623