Cặp số bằng nhau

Xem dạng PDF

Gửi bài giải

Điểm: 0,01 (OI)
Giới hạn thời gian: 3.0s
Giới hạn bộ nhớ: 256M
Input: CSBN.inp
Output: CSBN.out

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Bình là học sinh có đam mê với các con số. Một hôm Bình ngồi viết ra 1 dãy số nguyên bất kì và nhận thấy có nhiều số nguyên có giá trị bằng nhau. Bình muốn biết dãy số vừa viết ra có bao nhiêu cặp số có giá trị bằng nhau nên nhờ các bạn học sinh giỏi Tin lập trình giúp.

Yêu cầu: Cho ~N~ số nguyên dương lần lượt là ~a_1~, ~a_2~, ..., ~a_N~. Hãy giúp Bình xác định có bao nhiêu cặp số bằng nhau (~a_i = a_j~ với ~i < j~ được tính là ~1~ cặp).

Input

Từ tệp văn bản CSBN.INP gồm ~2~ dòng:

  • Dòng thứ nhất là số nguyên ~N~ (~1 \le N \le 10^7~).

  • Dòng thứ hai gồm ~N~ số ~a_1~, ~a_2~, ..., ~a_N~ (~1 \le a_i \le 10^9~).

Output

Đưa tệp văn bản CSBN.OUT chứa số cặp bằng nhau.

Sample Input 1

5
4 5 4 6 1

Sample Output 1

1

Sample Input 2

7
7 8 6 8 6 3 6

Sample Output 2

4

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • -1
    duongoi281012  đã bình luận lúc 2, Tháng 12, 2025, 15:11

    include <bits/stdc++.h>

    using namespace std; int upper(int n, int a[], int x) { int l = 1, r = n; int ans = -1; while(l <= r) { int mid = l + (r - l) / 2; if(a[mid] == x) {ans = mid; l = mid + 1;} else if(a[mid] < x) l = mid + 1; else r = mid - 1; } return ans; }

    int lower(int n, int a[], int x) { int l = 1, r = n; int ans = -1; while(l <= r) { int mid = l + (r - l) / 2; if(a[mid] == x) {ans = mid; r = mid - 1;} else if(a[mid] > x) r = mid - 1; else l = mid + 1; } return ans; }

    int main() { freopen("CSBN.INP", "r", stdin); freopen("CSBN.OUT", "w", stdout); iosbase :: syncwith_stdio(0); cin.tie(NULL); int n; cin >> n; int a[n + 9]; long long ans = 0; for(int i = 1; i <= n; i++) cin >> a[i]; sort(a + 1, a + 1 + n); for(int i = 1; i <= n; i++) { int l = lower(n, a, a[i]), r = upper(n, a, a[i]); long long abc = r - l + 1; ans += (abc * (abc - 1)) / 2; i = r + 1; } cout << ans; } // day la code tknp cho mn nhe


  • -1
    quandark050508hp  đã bình luận lúc 15, Tháng 10, 2025, 14:07

    include<bits/stdc++.h>

    using namespace std;

    int main(){ freopen("CSBN.INP" , "r" , stdin); freopen("CSBN.OUT" , "w" , stdout); ios::syncwithstdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; unorderedmap<int , int > mp; for(int i = 0 ; i < n ; i++){ int x ; cin >> x; mp[x]++; } int ans = 0; for(unorderedmap<int, int >::iterator it = mp.begin() ; it != mp.end() ; it++){ int count = it->second; ans+= count*(count-1)/2; } cout << ans; return 0; } // sao minh bi sai 10 test cuoi nhi


  • -6
    nb_truonghansieu_legiabao  đã bình luận lúc 6, Tháng 7, 2025, 15:55 sửa 2

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -8
    vobaonam  đã bình luận lúc 25, Tháng 5, 2025, 2:37

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -1
    hoangquan2509  đã bình luận lúc 9, Tháng 5, 2025, 7:43

    wtf cho hỏi:

    • giải thích nhé?
    • vs không được xem editurial?

  • 1
    luongxuantung50  đã bình luận lúc 3, Tháng 5, 2025, 15:52

    dùng tknp sẽ an toàn hơn nếu dùng unordered_map trong thi thật khá rủi ro


    • 0
      nguyentranhieu208  đã bình luận lúc 4, Tháng 6, 2025, 3:53

      nếu dùng tknp thì chỗ điều kiện i < j xử lí như nào vậy b


      • 1
        nguyenhuuhoanglt73  đã bình luận lúc 26, Tháng 7, 2025, 1:28

        thì cặp giống nhau thì luôn có 1 chỉ số đứng trước mò:>>


  • -2
    khanhdzvcl  đã bình luận lúc 18, Tháng 4, 2025, 1:12

    Bài này dùng unordered_map sẽ không bị TLE 😊


    • -6
      thaihsgserk60  đã bình luận lúc 10, Tháng 7, 2025, 13:33

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -4
    tranbaphu098  đã bình luận lúc 17, Tháng 4, 2025, 11:50

    sos


  • -6
    tranbaphu098  đã bình luận lúc 16, Tháng 4, 2025, 12:29

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -5
    Gilderoy  đã bình luận lúc 11, Tháng 4, 2025, 14:14

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -6
    vylun271027  đã bình luận lúc 9, Tháng 4, 2025, 12:21

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 12
    quangthenpc  đã bình luận lúc 5, Tháng 4, 2025, 6:58

    !SPOILER!

    Dùng công thức tổ hợp để tính.

    Ta có công thức tổ hợp để tính số cặp tạo thành được từ n lần xuất hiện của a_i là: $$ C_n^k = \frac{n!}{(n - k)! . k!} $$.

    Nhận thấy rằng trong bài toán này, k = 2, nên công thức tổ hợp chỉ còn là: $$ C_n^2 = \frac{n * (n - 1)}{2} $$ Với n là số lần xuất hiện của một số trong mảng.

    Code: https://onlinegdb.com/VK77shNe6


    • 0
      baongudot  đã bình luận lúc 30, Tháng 10, 2025, 4:12

      10^9 dùng map :))))))


    • 0
      23162035  đã bình luận lúc 3, Tháng 8, 2025, 14:26

      Su dung unordered_map nhe, ban dung map chi qua duoc tam 10 test thoi