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 小时前
第九章-数字三角形
算法
在路上看风景10 小时前
19. 成员初始化列表和初始化对象
c++
uesowys11 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
zmzb010311 小时前
C++课后习题训练记录Day98
开发语言·c++
ValhallaCoder11 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮11 小时前
AI 视觉连载1:像素
算法
念风零壹11 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
智驱力人工智能11 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥12 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风12 小时前
代码随想录第十五天
数据结构·算法·leetcode