二分+计数,CF1569D Inconvenient Pairs

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

Problem - 1569D - Codeforces


二、解题报告

1、思路分析

我们考虑路径距离等于曼哈顿距离的点对长什么样子?

如果某点在交点上,那么它到任意点的距离都是曼哈顿距离,我们直接删除这个点

我们发现距离不是曼哈顿距离的点对,它们所处的线段一定平行且不重合

那么我们记录每组平行线段上点的数目ti,以及每个线段上点的数目kij

答案就是 Σ(ti - 1) * ti / 2 - Σ(kij - 1) * kij / 2

具体统计每个点处于哪个竖直线段还是水平线段时,由于每个线段的左(下)端点都不同,我们以左(下)端点来区分每个(组)线段即可

具体看代码

2、复杂度

时间复杂度: O(n + m + k(logn + logm))空间复杂度:O(n + m)

3、代码详解

#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define int long long
const int N = 2e5 + 10;
int xs[N], ys[N];void solve(){int n, m, k;cin >> n >> m >> k;unordered_map<int, int> cntx, cnty;unordered_map<int, unordered_map<int, int>> cntxy, cntyx;for(int i = 0; i < n; i ++) cin >> xs[i];for(int i = 0; i < m; i ++) cin >> ys[i];for(int i = 0, x, y; i < k; i ++){cin >> x >> y;int lx = lower_bound(xs, xs + n, x) - xs, ly = lower_bound(ys, ys + m, y) - ys;if(xs[lx] == x && ys[ly] == y) continue;	//删掉if(xs[lx] == x){	//verticalcnty[ly] ++;cntxy[lx][ly] ++;} else{	//horizontalcntx[lx] ++;cntyx[ly][lx] ++;		}}int res = 0;for(int i = 0; i < n; i ++){int t = cntx[i];res += t * (t - 1) / 2;for(auto& p : cntxy[i]){t = p.second;res -= t * (t - 1) / 2;}}for(int i = 0; i < m; i ++){int t = cnty[i];res += t * (t - 1) / 2;for(auto& p : cntyx[i]){t = p.second;res -= t * (t - 1) / 2;}}	cout << res << '\n';
}signed main(){ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int _  = 1;cin >> _;while(_ --)solve();	return 0;
}

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

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

相关文章

什么是高级持续威胁(APT)

高级持续性威胁&#xff08;Advanced Persistent Threat&#xff0c;APT&#xff09;&#xff0c;又叫高级长期威胁&#xff0c;是一种复杂的、持续的网络攻击&#xff0c;包含三个要素&#xff1a;高级、长期、威胁。 【高级】是指执行APT攻击需要比传统攻击更高的定制程度和…

Remix框架实现 SSR

SSR SSR是一种网页渲染方式&#xff0c;它与传统的客户端渲染&#xff08;CSR&#xff09;相对&#xff0c;在日常的项目中我们更多是使用 CSR 的方式进行前端分离开发&#xff0c;渲染会在浏览器端进行。然而在SSR中&#xff0c;当用户请求一个网页时&#xff0c;服务器将生成…

MySQL数据库表的创建DDL语句(21-30)

schooldb库——utf8字符集——utf8_general_ci排序规则 DDL 21.用户反馈表&#xff08;feedback&#xff09; CREATE TABLE h_feedback (feedbackId int(11) NOT NULL AUTO_INCREMENT COMMENT ID,feedbackType int(4) NOT NULL DEFAULT 0 COMMENT 反馈类型&#xff0c;内容来…

karateclub,一个超酷的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超酷的 Python 库 - karateclub。 Github地址&#xff1a;https://github.com/benedekrozemberczki/karateclub Python karateclub是一个用于图嵌入和图聚类的库&#xff…

第十四届蓝桥杯大赛软件赛省赛(Python大学A组)

2023年蓝桥杯 省赛真题Python大学A组 试题A&#xff1a;特殊日期 试题B&#xff1a;分糖果 试题C&#xff1a;三国游戏 试题D&#xff1a;平均 试题E&#xff1a;翻转 试题F&#xff1a;子矩阵 试题G&#xff1a;阶乘的和 …

《Video Mamba Suite》论文笔记(4)Mamba在时空建模中的作用

原文翻译 4.4 Mamba for Spatial-Temporal Modeling Tasks and datasets.最后&#xff0c;我们评估了 Mamba 的时空建模能力。与之前的小节类似&#xff0c;我们在 Epic-Kitchens-100 数据集 [13] 上评估模型在zero-shot多实例检索中的性能。 Baseline and competitor.ViViT…

Unity之ShaderGraph入门简介与配置

前言 ShaderGraph是Unity的一个可视化着色器编辑工具,它允许开发者在不编写代码的情况下创建复杂的着色器效果。ShaderGraph提供了一个直观的图形界面,用户可以通过拖拽节点并连接它们来构建自定义的着色器。用户可以在ShaderGraph中使用各种节点,如数学运算、纹理采样、颜…

QT:信号和槽

文章目录 信号和槽connect函数槽自定义槽第一种第二种 信号和槽 这里的信号和Linux的信号一样吗&#xff1f; 答案是差不多&#xff0c;但是也有一定的区别&#xff0c;而且也是两个不同的概念 信号有三个概念&#xff0c;一个是信号源&#xff0c;这个信号是由谁发送的&…

【ROMA核心特性数据、服务、消息、设备集成及统一运维】

1、数据集成 FDI旨在解决多种数据源的快速灵活集成能力&#xff0c;您可以在任意时间、任意地点、任意系统之间实现实时数据订阅和定时增量数据迁移。 &#xff08;1&#xff09;数据集成任务的生命周期管理 &#xff08;2&#xff09;FDI支持修改数据集成任务的信息、查看数…

强化学习:时序差分法【Temporal Difference Methods】

强化学习笔记 主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程&#xff0c;个人觉得赵老师的课件深入浅出&#xff0c;很适合入门. 第一章 强化学习基本概念 第二章 贝尔曼方程 第三章 贝尔曼最优方程 第四章 值迭代和策略迭代 第五章 强化学习实例分析:GridWorld…

简单说说 gather_plan_statistics

DBA的日常核心工作之一是对线上有性能问题的SQL语句进行优化。其中优化SQL语句的最关键的一步是得到SQL的执行计划。那么一个常见的问题来了。如何得到一个SQL语句的真实执行计划?方法有很多。今天说其中一种方法就是使用 gather_plan_statistics(收集计划统计信息) 首先简单…

微信小程序生成二维码加密(CryptoJS4.0加密PHP8.0解密)AES方式加密

1、小程序创建 crypto-js.js和crypto.js两个文件&#xff08;点击文件即可&#xff09; 2、小程序js页面引入 var crypto require(../../utils/crypto.js);//注意路径是否正确3、使用 let data {id: that.data.id,name: dx}console.log(JSON.stringify(data))console.log(&…