Free Contest 105 - DISTSUM

Xem dạng PDF

Gửi bài giải

Điểm: 0,80 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

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

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài

Lưu ý: các bạn không nhập, xuất dữ liệu bằng file kể cả khi đề bài có yêu cầu. Đọc, ghi dữ liệu được thực hiện ở stdin và stdout.


Bình luận

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



  • 2
    ngoccaidu2008  đã bình luận lúc 19, Tháng 10, 2025, 14:28

    Subtask1:

    Dùng 2 for giải như bình thường

    subtask2: lưu x và y ở 2 mảng riêng biệt

    Vì nó có dấu trị tuyệt đối nên ta tìm cách phá nó đi. Cách phá thì sắp xếp lại mảng x và mảng lưu y với mình thì cho sắp xếp không tăng

    +) Khi đó ta giả sử mảng x lưu các tọa độ x có giá trị a,b,c,d:

    (a-b)+(a-c)+(a-d)+(b-c)+(b-d)+(c-d)=3a+2b+1c+0d-0a-1b-2c-3d=3a+b-c-3d

    Như vậy tổng quát lên là: với mỗi giá trị x[i] thì nó sum(x[i])=(i-1)(-x[i])+(n-i)(x[i])

    Tương tự với y cũng vậy.

    code tham khảo:

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    #define __Hormer_Nguyen__ signed main()
    #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
    const int maxn=5+1e5;
    int n,x[maxn],y[maxn],cntx,cnty;
    bool cmp(int x,int y)
    {
        return x>y;
    }
    __Hormer_Nguyen__
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n;
        for (int i=1;i<=n;i++) cin>>x[i]>>y[i];
        sort(x+1,x+n+1,cmp);
        sort(y+1,y+n+1,cmp);
        for (int i=1;i<=n;i++)
        {
            cntx+=(i-1)*(-x[i])+(n-i)*(x[i]);
        }
        for  (int i=1;i<=n;i++)
        {
            cnty+=(i-1)*(-y[i])+(n-i)*(y[i]);
        }cout<<(cntx)+(cnty);
    }