Module: Karşılaştırıcı ile sıralama


Problem

10/11

Kum

Problem

Programı aşağıdaki sorunu çözecek şekilde değiştirin.

Bir hırsız bir mağazayı soyarken N kutu altın tozu buldu. i numaralı kutuda kumun değeri vi ve ağırlığı wi. Hırsız ganimeti taşımak için bir sırt çantası kullanır. Sırt çantasının taşıma kapasitesi W ile sınırlıysa, bir hırsızın taşıyabileceği en büyük toplam kum maliyetinin belirlenmesi gerekir.
 
Kutulardan istediğiniz miktarda kum dökebilirsiniz. Daha sonra dökülen kumun maliyetinin tüm kutunun maliyetine oranı, dökülen kum hacminin tüm kutunun hacmine oranına eşit olacaktır.
 
Giriş
Giriş dosyasının ilk satırı iki sayı içerir  - N ve W (1 <= N <= 1000, 0 <= W <= 1000000). Bunu, her biri iki tam sayıdan oluşan N satır izler. i-th satırı, vi maliyetini ve wi ağırlığını içerir iinci çekmecede kum. Hiçbir sayı negatif değildir ve 10'u geçmez6.
 
Çıktı
İstenen maksimum maliyeti 0,0001'den fazla olmayan bir hatayla yazdırın.

 
Örnekler
# Girdi Çıktı
1
3 50
60 20
100 50
120 30
180.0000
Write the program below
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;

struct sand {
    int cost, weight;
    double cw;

    sand() { }
    
    sand(int _cost, int _weight) {
        this->cost = _cost;
        this->weight = _weight;
        this->cw = 1. * _cost / _weight;
    }
};

bool cmp(sand a, sand b) {    
}

vector<sand>sandArray(0);
int n;
int w;
double answer;

int main() {
    cin >> n >> w;
    sandArray.resize(n);
    for (int i = 0; i < n; i++) {
        int cost, weight;
        cin >> cost >> weight;
        sandArray.at(i) = sand(cost, weight);
    }

    sort(sandArray.begin(), sandArray.end(), cmp);

    for (int i = 0; i < n; i++)
        if (sandArray.at(i).weight <= w) {
            w -= sandArray.at(i).weight;
            answer += sandArray.at(i).cost;
        }
        else {
            answer += sandArray.at(i).cw * w;
            w = 0;
        }
        
    printf("%.4lf", answer);
}    

     

Program check result

To check the solution of the problem, you need to register or log in!