Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ đếm số cặp tọa độ có thể tạo từ hai tập điểm

Mô tả bài toán

Cho 2n điểm 2D chia thành 2 tập coordA, coordB (mỗi tập n điểm). Tạo cặp (a,b) với sao cho và . Mỗi điểm chỉ dùng 1 lần. Tìm số cặp tối đa.

Ví dụ

n=3, A={{1,3},{2,4},{4,3}}, B={{2,2},{4,2},{0,2}}. Đầu ra: 1 (cặp (1,3)-(0,2) không thỏa a.x

Thuật toán (Tham lam + Sắp xếp)

  1. Sắp xếp A và tăng dần theo x (rồi y).
  2. Duyệt A từ lớn đến nhỏ (i=n-1..0).
  3. Với mỗi A[i], tìm đầu tiên chưa dùng (theo thứ tự tăng) thỏa (lưu ý: code gốc so sánh first
  4. Đánh dấu dùng, đếm++, break.

Đoạn mã C++

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

void solve(int n,vector<pair<int,int>> A,vector<pair<int,int>> B){
    int chk[100]={0};
    sort(A.begin(),A.end());
    sort(B.begin(),B.end());
    int k=0;
    for(int i=n-1;i>=0;i--){
        for(int j=0;j

Đầu vào / Đầu ra

Input: 3, {{1,3},{2,4},{4,3}}, {{2,2},{4,2},{0,2}}

Output: 1