Tập xe

Xem PDF




Tác giả:
Dạng bài
Điểm: 300 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cô giáo trường tiểu học \(X\) đang dạy \(n\) học sinh tập xe đạp, các học sinh được đánh số từ \(1\) tới \(n\), học sinh thứ \(𝑗\) có trọng lượng là \(a_𝑗\). Có một xe đạp duy nhất với tải trọng là \(m\), hai học sinh chỉ có thể cùng lên xe nếu tổng trọng lượng của hai học sinh không vượt quá \(m\).

Cô giáo tự hỏi có bao nhiêu cách chọn hai học sinh khác nhau cho cùng lên xe, sau nhiều giờ tính toán không có kết quả, cô quyết định hỏi các chuyên gia lập trình giải bài toán Counting Student Pairs (CSP)

Yêu cầu: Đếm số cặp chỉ số \(i, j\) trong đó \(i < j\)\(a_i + a_j \leq m\)

Input

  • Dòng 1 chứa hai số nguyên dương \(n, m\ (m \leq 10^6)\)
  • Dòng 2 chứa \(n\) số nguyên dương \(a_1, a_2, \ldots, a_n\) (\(\forall{i}: a_i \leq 10^6\))

Output

Ghi một số nguyên duy nhất là đáp số

Scoring

  • Subtask #1 (\(60\%\) số điểm): \(n \leq 10^4\).
  • Subtask #2 (\(20\%\) số điểm): \(n \leq 10^5\).
  • Subtask #3 (\(20\%\) số điểm): \(n \leq 10^6\).

Example

Test 1

Input
5 6
1 2 3 4 5
Output
6

Bình luận


  • 0
    TruongQuangKhaicht1    9:14 p.m. 7 Tháng 10, 2024

    Code C++

    include<bits/stdc++.h>

    using namespace std;
    long long i,n,s,a[1123456],j,k=0,m,c;
    int main()
    {
    //freopen("a.inp","r",stdin);
    //freopen("a.out","w",stdout);
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
    cin>>a[i];
    }
    sort(a+1,a+1+n);
    for(i=1;i<=n;i++)
    {
    c=upper_bound(a+i+1,a+1+n,m-a[i])-a;
    s+=c-i-1;
    }
    cout<<s;
    }

    • 13 bình luận nữa