Giải bài ntucoder KIVU - Khiêu vũ

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

  1. nguyen minh duc

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

    Thuật toán:

    • Gọi dãy các bạn trai là A và các bạn nữ là B.
    • Ta sắp xếp các bạn nam và nữ theo thứ tự tăng dần về chiều cao.
    • Bài này ta sẽ dùng 2 con trỏ. Với cặp A (i) và B (j) thỏa mãn ta sẽ ưu tiên dịch chuyển con trỏ trên dãy A một lượng x đơn vị đến khi gặp A (i+x) > B (j+1). Mỗi cặp tương ứng như vậy sẽ tăng kết quả lên 1.

    Code:

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