Giải bài ntucoder VASU - Vắt sữa bò

Thảo luận trong 'Khác' bắt đầu bởi nguyen minh duc, 13 Tháng sáu 2023.

  1. nguyen minh duc

    Bài viết:
    28
    Link bài:

    Thuật toán:


    • Ta sẽ vắt các con bò theo thứ tự từ nhiều sữa nhất đến ít sữa nhất.
    • Nếu vắt những con bò ít sữa hơn thì những con bò nhiều sữa hơn sẽ bị giảm lượng sữa rất nhiều (Tối đa n-1 lít) trong khi nếu để những con bò ít sữa vắt cuối cùng, chúng có hết sữa giữa chừng cũng không làm hao hụt gì thêm.

    VD: Với 3 con bò có trữ lượng sữa lần lượt là 1 2 3 lít.

    Nếu vắt lần lượt từ bé đến lớn, ta sẽ thu được lần lượt là 1 lít ở con thứ nhất, 1 lít ở con thứ 2 (do bị hoảng 1 lần) và 1 lít ở con thứ 3 (bị hoảng 2 lần). Nếu vắt theo thứ tự ngược lại, ta sẽ nhận được 3 lít ở con số 1, 1 lít ở con thứ 2 (Bị hoảng 1 lần) và không có gì ở con thứ 3. Trường hợp 2 ta thu được nhiều sữa hơn hẳn.

    Code:

    Mã:
    #include <bits/stdc++.h>
    #define repinc(k, n) for (int i = k; i <= n; i++)
    #define repdec(n, k) for (int i = n; i >= k; i--)
    using namespace std;
    
    int n, ans;
    int a[1007];
    
    void read(){
        ios_base::sync_with_stdio(0);
        cin.tie(0); cout.tie(0);
        //freopen("VASU.INP", "r", stdin);
        //freopen("VASU.OUT", "w", stdout);
        cin >> n;
        repinc(1, n) cin >> a;
    }
    
    void run(){
        sort(a+1, a+n+1);
        repdec(n, 1){
            if (a-(n-i) > 0) ans += a-(n-i);
            else continue;
        }
        cout << ans;
    }
    int main(){
        read();
        run();
        return 0;
    }
     
Trả lời qua Facebook
Đang tải...