

BÀI 3. Thi đấu câu lông Hai đội A và B tham gia thi đấu giao hữu cầu lông với nhau, thể thức thi đấu là "đấu đôi" tức là mỗi đội sẽ chọn ra 2 vận động viên thi đấu với nhau trong một trận đấu Mỗi đội có n vận động viên, trong đó các vận động viên đội A có năng lực thi đấu lần lượt là a1, a2, ..., An, các vận động viên của đội B có năng lực thi đấu lần lượt là b1, b2, .., bn. Cặp vận động viên thứ i, thứ j bên đội A sẽ thắng cặp vận động viên động viên thứ i, thứ j nếu thỏa mãn ai + aj > bi + bj. Em hãy cho biết, có bao nhiêu cặp vận động viên bên đội A thắng cặp vận động viên bên đội B. Tức là cân đếm cặp (i,j) thỏa mãn ai + aj > bi + bj. INPUT: BADMINTON.INP • Dòng đầu tiên chứa số nguyên n (1 ≤ n ≤ 200.000), • Dòng thứ 2 chứa n số nguyên a1, a2,..., an (0 ≤ ai ≤ 1e9; i = 1 /n); • Dòng thứ 3 chứa n số nguyên b1, b2, ..., bn (0 ≤ bi ≤, 1e9; i = 1 ÷ n) OUTPUT: BADMINTON.OUT một số nguyên là kết quả bài toán.
code c++
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
#include <bits/stdc++.h>
using namespace std;
const int ln = 200005;
int a[ln], b[ln];
int ta[ln * ln], tb[ln * ln];
int n, mA = 0, mB = 0;
int main()
{
freopen("BADMINTON.INP", "r", stdin);
freopen("BADMINTON.OUT", "r", stdin);
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n; i++) cin >> b[i];
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
ta[mA++] = a[i] + a[j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
tb[mB++] = b[i] + b[j];
}
}
sort(tb, tb + mB);
int abc = 0;
for (int i = 0; i < mA; i++)
{
abc += lower_bound(tb, tb + mB, ta[i]) - tb;
}
cout << abc << endl;
return 0;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin