Submission #1370397

#TimeUsernameProblemLanguageResultExecution timeMemory
1370397dienhaidangRotating Lines (APIO25_rotate)C++20
Compilation error
0 ms0 KiB
#include <iostream>
#include <vector>
#include <numeric>
#include <map>

using namespace std;

int main() {
    // Tối ưu hóa I/O để chống Time Limit Exceeded (TLE)
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    // Đọc số lượng đường thẳng
    if (!(cin >> n)) return 0;

    long long ans = 0;
    map<pair<long long, long long>, int> cnt;

    for (int i = 0; i < n; ++i) {
        long long x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        
        // Tính vector chỉ phương (a, b) từ 2 điểm
        long long a = x2 - x1;
        long long b = y2 - y1;

        // Bỏ qua trường hợp lỗi dữ liệu (2 điểm trùng nhau)
        if (a == 0 && b == 0) continue; 

        // Rút gọn vector bằng ước chung lớn nhất (GCD)
        long long g = std::gcd(a, b);
        long long norm_a = a / g;
        long long norm_b = b / g;

        // Chuẩn hóa dấu để các vector đối nhau cùng quy về một key duy nhất
        // (Ví dụ: vector hướng (-1, -1) và (1, 1) biểu diễn cùng một độ dốc)
        if (norm_a < 0 || (norm_a == 0 && norm_b < 0)) {
            norm_a = -norm_a;
            norm_b = -norm_b;
        }

        // Kỹ thuật gộp logic: cộng số lượng đường thẳng cùng hướng đã duyệt trước đó 
        // vào tổng đáp án, sau đó mới tăng bộ đếm của hướng này lên 1.
        ans += cnt[{norm_a, norm_b}]++; 
    }

    // In ra tổng số cặp thỏa mãn
    cout << ans << "\n";
    return 0;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccNv0Fgv.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccdIuiMU.o:rotate.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccNv0Fgv.o: in function `main':
grader.cpp:(.text.startup+0x278): undefined reference to `energy(int, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status