{"id":"2HWh3m9LLZ","url":"https://pastebin.ca/2HWh3m9LLZ","raw_url":"https://raw.anybin.ca/2HWh3m9LLZ","visibility":"public","access":"public","created_at":1790824497686,"expires_at":1791429297686,"fetch_limit":null,"fetches_used":0,"reads_remaining":null,"size_bytes":1334,"syntax_hint":null,"title":null,"filename":null,"change_note":null,"cipher":null,"cipher_meta":null,"parent_id":null,"root_id":"2HWh3m9LLZ","version":1,"owner_id":null,"recipient_id":null,"body":"#include <bits/stdc++.h>\nusing namespace std;\n#define int long long  // 数据范围大，开long long防溢出\n\nint n, L;\nvector<int> arr;\n\nsigned main() {\n    // 快读快写\n    ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);\n    cin >> n >> L;\n    int m = L / 2;  // m是半圆长度，传送的距离\n\n    for (int i = 0; i < n; i++) {\n        int a; cin >> a;\n        // opp是a的正对（传送后）的位置\n        int opp = a + m;\n        if (opp >= L) opp -= L;\n        // 将一对对径点压缩成[0,m)内的代表点，取较小的那个\n        arr.push_back(min(a, opp));\n    }\n\n    sort(arr.begin(), arr.end());\n    // 去重：相同压缩点只保留一份\n    arr.erase(unique(arr.begin(), arr.end()), arr.end());\n    int k = arr.size();\n\n    // 只有一类点，站原地直接传送就能全部访问，时间0\n    if (k == 1) {\n        cout << 0 << endl;\n        return 0;\n    }\n\n    int gap = 0;\n    // 计算排序后相邻点之间的空隙\n    for (int i = 1; i < k; i++) {\n        gap = max(gap, arr[i] - arr[i-1]);\n    }\n    // 环形：最后一个点回到第一个点的空隙\n    int ci = m - (arr.back() - arr[0]);\n    gap = max(gap, ci);\n\n    // m是总长度，减去最大空隙就是最少需要行走的距离\n    int ans = m - gap;\n    cout << ans << endl;\n\n    return 0;\n}\n"}