A. Weird Sum - 思维

题面

分析

所有点的曼哈顿距离可以分解成所有点的任意横坐标之间的距离,以及所有任意纵坐标的距离,对于处理所有点的距离,可以利用线段的思想,将所有点排序,第一个点很显然不用处理,第二个点需要求的距离有第二个点到第一个点的距离,第三个点需要处理到第一个点的距离,以及到第二个点的距离。

代码
cpp 复制代码
#include <bits/stdc++.h>

#define int long long

using namespace std;

const int N = 1e5 + 10;

vector<int> a[N], b[N];

void solve() {
    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= 1e5; i ++) a[i].clear(), b[i].clear();
    for(int i = 0; i < n; i ++) {
        for(int j = 0; j < m; j ++) {
            int x;
            cin >> x;
            a[x].push_back(i);
            b[x].push_back(j);
        }
    }
    int ans = 0;
    for(int i = 1; i <= 1e5; i ++) {
        sort(a[i].begin(), a[i].end());
        sort(b[i].begin(), b[i].end());
        int s = 0;
        for(int j = 0; j < a[i].size(); j ++) {
            ans += j * a[i][j] - s;
            s += a[i][j];
        }
        s = 0;
        for(int j = 0; j < b[i].size(); j ++) {
            ans += j * b[i][j] - s;
            s += b[i][j];
        }
    }
    cout << ans << "\n";
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    T = 1;//cin >> T;
    while(T --) {
        solve();
    }
}
相关推荐
新晓·故知10 分钟前
<基于递归实现线索二叉树的构造及遍历算法探讨>
数据结构·经验分享·笔记·算法·链表
咖啡里的茶i13 分钟前
C++之继承
c++
总裁余(余登武)21 分钟前
算法竞赛(Python)-万变中的不变“随机算法”
开发语言·python·算法
NormalConfidence_Man22 分钟前
C++新特性汇总
开发语言·c++
Eric.Lee202133 分钟前
音频文件重采样 - python 实现
人工智能·python·深度学习·算法·audio·音频重采样
风清扬_jd1 小时前
Chromium 中JavaScript Fetch API接口c++代码实现(二)
javascript·c++·chrome
huapiaoy1 小时前
Redis中数据类型的使用(hash和list)
redis·算法·哈希算法
冷白白1 小时前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法
鹤上听雷1 小时前
【AGC005D】~K Perm Counting(计数抽象成图)
算法
睡觉然后上课1 小时前
c基础面试题
c语言·开发语言·c++·面试