Viết phương trình tính tổng số lít sữa vắt C++

2 minute read




Đề bài

Vào một buổi sáng anh Bo sắp một đàn bò gồm n con để vắt sữa. Anh dự kiến là vào hôm đó con bò thứ i có khả năng vắt được ai lít sữa. Tuy nhiên đàn bò của anh có đặc tính là cứ mỗi lần vắt sửa một con, thì những con còn lại vì chúng sợ quá nên sẽ bị giảm sản lượng mỗi con 1 lít sữa. Nếu vắt sửa con bò thứ nhất, n-1 con còn lại bị giảm sản lượng, sau đó vắt sửa con bò thứ 2 thì n-2 con còn lại bị giảm sản lượng... Bạn hãy giúp anh Bo tính xem thứ tự vắt sửa bò như thế nào để số lượng sửa vắt được nhiều nhất nhé.

Dữ liệu vào: Vào từ file vatsua.inp gồm 2 dòng:

- Dòng thứ nhất là số nguyên (1≤n≤105) là số lượng con bò.

- Dòng thứ 2 gồm n số nguyên a1, a2, ... ,an (1≤ ai ≤109) là sản lượng sửa của các con bò.

Kết quả: Ghi ra file vatsua.out: một số nguyên xác định số lít sửa nhiều nhất mà anh Bo có thể vắt được.

VD:

vatsua.inp vatsua.out vatsua.inp vatsua.out

4

4 4 4 4 10 4 2 1 4 3 6

Giải thích test 1:

Vắt sửa con bò 1 được 4, số con còn lại cho số sửa là 3 3 3.

Vắt sửa con bò 2 được 3, số con còn lại cho số sửa là 2 2.

Vắt sửa con bò 3 được 2, số con còn lại cho số sửa là 1.

Vắt sửa con bò 4 được 1. Vậy số sửa vắt được là 1


Code

#include <bits/stdc++.h>
#define N 1000
using namespace std;
long long tong,k,n,i,a[N];
bool cmp(int x,int y)
{
    return x>y;
}
int main()
{

    ios_base::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
    freopen("vatsua.inp","r",stdin);
    freopen("vatsua.out","w",stdout);
    cin>>n;
    for(i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+n+1,cmp);
        tong=0;
        k=0;
        for(i=1;i<=n;i++)
            if(a[i]-k>0)
        {
            tong=tong+a[i]-k; k++;
        }
        else break;
        cout<<tong;

    return 0;
}