1 条题解

  • 0
    @ 2026-5-28 22:07:43

    我居然这个题上还想了一会,可能是数据结构题做多导致思维钝化了?

    由于模意义下数轴是个环,因此问题几何意义如下:

    在长度为 mm 的环上给定 nn 个点,选出点 xx 使得每个点离 xx 的距离和最小。

    这个问题在链上可以直接取中位下标,在环上先枚举断一条边就转化为链上问题了。前缀和拆贡献。

    /* Good Game, Well Play. */
    #include <bits/stdc++.h>
    #define lowbit(x) ((x) & (-(x)))
    using namespace std;
    
    const int N = 200010;
    int T, n, m;
    long long pr_a[N * 2], a[N * 2];
    inline void sol()
    {
    	cin >> n >> m; long long res = 1e18;
    	for(int i = 1; i <= n; ++i) cin >> a[i], a[i] %= m;
    	sort(a + 1, a + n + 1);
    	for(int i = 1; i <= n; ++i) a[i + n] = a[i] + m;
    	for(int i = 1; i <= 2 * n; ++i) pr_a[i] = pr_a[i - 1] + a[i];
    	for(int l = 1; l <= n; ++l)
    	{
    		int r = l + n - 1, mid = (l + r) >> 1;
    		res = min(res, (mid - l + 1) * a[mid] - (pr_a[mid] - pr_a[l - 1]) + (pr_a[r] - pr_a[mid]) - (r - mid) * a[mid]);
    	}
    	cout << res << '\n';
    }
    
    int main()
    {
    //	freopen("text.in", "r", stdin);
    //	freopen("prog.out", "w", stdout);
    	ios::sync_with_stdio(false);
    	cin.tie(0), cout.tie(0);
    	cin >> T;
    	while(T--) sol();
    	return 0;
    }
    /*
    
    */
    
    • 1

    [USACO25JAN] Farmer John's Favorite Operation S

    信息

    ID
    6919
    时间
    2000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    200
    已通过
    23
    上传者