Welcome! You have been invited by HinhHinhh to join our community. Please click here to register.
1 người đang xem
Bài viết: 28 Tìm chủ đề
3316 9
Link bài:

Thuật toán:


  • Mục đích ở đây là sắp xếp các cặp đấu sao cho trường sở tại đạt được số điểm lớn nhất.
  • Sắp xếp lần lượt số điểm năng lực của 2 đội từ thấp đến cao.
  • Dùng 2 con trỏ, con trỏ i cho trường đề xuất, con trỏ j cho trường sở tại. Ta sẽ tìm các cặp đấu Ai và Bj sao cho Ai < Bj.
  • Các trường hợp còn lại không cần quan tâm vì thua và hòa sẽ không tính điểm.

Code:

Mã:
#include <bits/stdc++.h>
using namespace std;

int a[100007], b[100007];
int n;

int doit(int ia, int ib){
    if (ia <= n && ib <= n){
        if (a[ia] < b[ib]) return 1 + doit(ia+1, ib+1);
        if (a[ia] >= b[ib]) return doit(ia, ib+1);
    }
    return 0;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    //freopen("gida.inp", "r", stdin);
    //freopen("gida.out", "w", stdout);
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) cin >> b[i];
    sort(a+1, a+1 +n);
    sort(b+1, b+1+n);
    cout << doit(1, 1);

    return 0;
}
 

Những người đang xem chủ đề này

Nội dung nổi bật

Xu hướng nội dung

Back