A. Weird Sum

题目链接 : 

Problem - 1648A - Codeforces

题面 : 

 题意 : 

输入 n m (1≤n*m≤1e5) 和 n 行 m 列的矩阵 a,元素范围 [1,1e5]。
对于矩阵中的所有相同元素对,即满足 a[x1][y1] = a[x2][y2] 的元素对 (a[x1][y1], a[x2][y2]),把 abs(x1-x2) + abs(y1-y2) 加到答案中。
注意 (a,b) 和 (b,a) 只算一次。
输出答案。

思路:

1.结果在数组的横坐标和纵坐标的方向上是可以分离的,不影响;

2.将每一个数字相同的横坐标存进一个vector中,纵坐标一样处理,对于每个单独的vector(p) : 对于第i个数 : 对于p[i]左边有i个数,距离之和为 : (p[i]-p[0])+(p[i]-p[1])+...(p[i]-p[i-1]);
即 i * p[i] - (p[0]+p[1]+p[2]+...+p[i-1]); 

详情请看代码

代码 : 

全放一起 : 

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
const int N = 1e5 + 10;vector<vector<vector<int>>> res(100002, vector<vector<int>>(2, vector<int>()));
LL ans;// 对于p[i]左边有i个数,距离之和为 : (p[i]-p[0])+(p[i]-p[1])+...(p[i]-p[i-1]);
// 即 i * p[i] - (p[0]+p[1]+p[2]+...+p[i-1]); 
void fac(vector<int>& p){LL sum = 0;for(int i=0;i<p.size();i++){ans += (1LL) * i * p[i] - sum;sum += p[i];}
}inline void solve(){int n , m , x ; cin >> n >> m;for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin >> x;res[x][0].push_back(i); // 横坐标 res[x][1].push_back(j); // 纵坐标 }}for(auto& p : res){fac(p[0]);sort(p[1].begin(),p[1].end());fac(p[1]);}cout << ans << endl;
}int main()
{int _ = 1;while(_ --) solve();return 0;
}

分开处理(性能更优):

#pragma GCC optimize(3)
#include<iostream>
#include<vector>
#include<algorithm>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
vector<vector<int>> r(N, vector<int>()), c(N, vector<int>());
LL ans;// 对于p[i]左边有i个数,距离之和为 : (p[i]-p[0])+(p[i]-p[1])+...(p[i]-p[i-1]);
// 即 i * p[i] - (p[0]+p[1]+p[2]+...+p[i-1]); 
LL fac(vector<int>& p) {LL sum = 0, ys = 0;for (int i = 0; i < p.size(); i++) {ys += (1LL) * i * p[i] - sum;sum += p[i];}return ys;
}inline void solve() {int n, m; cin >> n >> m;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {int x; cin >> x;r[x].push_back(i); // 横坐标 c[x].push_back(j); // 纵坐标 }}for (auto& p : r) {ans += fac(p);}for (auto& p : c) {sort(p.begin(), p.end());ans += fac(p);}cout << ans << endl;
}int main()
{IOSint _ = 1;while (_--) solve();return 0;
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/174794.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】画面卡顿优化列表流畅度三之RecyclerView刷新机制notifyItemRangeInserted

经过长达一个多星期的反复渲染耗时记录&#xff0c;大致上有以下几个方面的地方可以优化&#xff1a; 列表组件RecyclerView刷新机制由notifyDataSetChanged()优化为notifyItemRangeInserted&#xff08;&#xff09;&#xff0c;后期有必要也会使用notifyItemRangeRemoved、n…

深圳联强优创手持PDA身份证阅读器 身份证核验手持机

身份证手持机外观比较小巧&#xff0c;方便携带&#xff0c;支持条码识别、人脸识别、NFC卡刷卡、内置二代证加密模块&#xff0c;可离线采集和识别二代身份证&#xff0c;进行身份识别。信息读取更便捷、安全高效。采用IP65高防护等级&#xff0c;1.5M防摔&#xff0c;可以适应…

【云备份项目两万字总结】服务端篇 -----附源码

项目总结 整体回顾逐步实现utill.hppconfig.hppdata.hpphot.hppservice.hpp 代码 整体回顾 服务端的目标是&#xff1a; 对客户端的请求进行处理管理客户端上传的文件 于客户端进行数据交换&#xff0c;我们需要引入网络&#xff0c;所以我们引入第三方库----httplib.h库&am…

【Python图像超分】Real-ESRGAN图像超分模型(超分辨率重建)详细安装和使用教程

1 前言 图像超分是一种图像处理技术&#xff0c;旨在提高图像的分辨率&#xff0c;使其具有更高的清晰度和细节。这一技术通常用于图像重建、图像恢复、图像增强等领域&#xff0c;可以帮助我们更好地理解和利用图像信息。图像超分技术可以通过多种方法实现&#xff0c;包括插值…

【Docker】Docker 网络

引言 Docker是一个开源的应用容器引擎&#xff0c;它允许开发者将应用及其依赖打包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器或Windows机器上&#xff0c;也可以实现虚拟化。Docker的主要优势之一是其网络功能&#xff0c;而网络功能的核心就是网络驱动…

自定义Matplotlib中的颜色映射(cmap)

要自定义Matplotlib中的颜色映射&#xff08;cmap&#xff09;&#xff0c;您可以按照以下步骤进行操作&#xff1a; 导入所需的库&#xff1a; import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap创建自定义颜色映…

Docker修改容器内部文件的三种方法

为啥要记录呀 今天在修改Docker内部文件的时候&#xff0c;安装vim居然失败了&#xff0c;在执行apt-get update时一直有几个404&#xff0c;解决无果&#xff0c;最后放弃安装vim&#xff0c;将文件拷贝出来修改&#xff0c;然后再拷贝到docker内部。记录一下如何修改Docker内…

软件工程分析报告06测试结果分析报告——基于Paddle的肝脏CT影像分割

测试结果分析报告 一、测试方法 本次测试涵盖了白盒测试和黑盒测试的相关技术。在白盒测试方面&#xff0c;采用了语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖、点覆盖和边覆盖等方法。在黑盒测试方面&#xff0c;采用了等价类划分、边界值分析、因…

jetson配置笔记

typora-root-url: /home/msj/ubuntu笔记本台式机环境配置说明/images Ubuntu18.04 配置 说明&#xff1a;我们所有文档配置都是按照ubuntu18.04&#xff0c;保证x86架构(笔记本台式机)和 ARM架构(jetson Nano只能安装18.04)的一致性 1. 更换各类源 我们所有源都更换清华源&a…

用二维码展示产品,随时查看图文并茂的介绍

传统的产品宣传方式&#xff0c;往往以产品手册、宣传单等纸质物料为主&#xff0c;不仅会造成客户获取和携带上的不便&#xff0c;一旦内容需要更新&#xff0c;就必须重新印刷&#xff0c;造成不必要的浪费&#xff0c;而且老用户看到的仍然是旧内容。 其实可以用二维码进行…

vuejs - - - - - 移动端设备兼容(pxtorem)

pxtorem的使用 1. 依赖安装2. vue.config.js配置3. 动态设置html的font-size大小4. 效果如图&#xff1a; 1. 依赖安装 yarn add postcss-pxtorem -D 2. vue.config.js配置 module.exports {...css: {loaderOptions: {postcss: {plugins: [require("postcss-pxtorem&quo…

吊打Fast Request还免费? 这款插件真心好用!

今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;比Fast Request更好用并且完全免费&#xff01;三大亮点功能&#xff1a;写完代码IDEA内一键生成API文档&#xff1b;写完代码IDEA内一键调试&#xff0c;&#xff1b;生成API目录树&#xff0c;双击即可快速…