Educational Codeforces Round 113 (Rated for Div. 2) D. Inconvenient Pairs
Educational Codeforces Round 113(Rated for Div. 2)的其他题解点我
D. Inconvenient Pairs
原题链接
题目大意:
在一个大小为 1e6 * 1e6的矩形中
有n条横着的马路(水平)
有m条竖着的马路(竖直)
有k个人
问有多少对人(两个人)之间走马路的距离大于他们的曼哈顿距离
思路:
首先,对于站在 十字路口 的人,到达其他人的距离一定是等于其曼哈顿距离的
那么对于不在十字路口的人
我们会发现,与其距离大于曼哈顿距离的一定人,一定是在其上面的路或者下面的路(拐两个弯)或者左边右边的路(不在同一条路!)
我们为了不重复计算
只取上面,或者只取左边
注意这里是该点左边所有的路,和该点上面所有的路
具体看代码解释
AC代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#define ll long long
#define pii pair<int ,int >
using namespace std;
const int maxn = 2e5 + 7;
const ll INF_ll = 1e18;
const int INF_int = 1e9;
const int mod = 998244353;
int a[maxn], b[maxn];//a,b分别表示横着的路和竖着的路
map<int ,int > px, py;//第k条横着的路上面有多少个人,第k条竖着的路左边有多少个人
map<pii, int >pxy, pyx;//x,y上有多少个人,这里用两个的原因是,可能你这个点在横着的点里计算了一次贡献,但是竖着的还没计算,所以要分开来
int main() {int T;scanf("%d", &T);while (T--) {pxy.clear(); pyx.clear();px.clear(); py.clear();int n, m, k;scanf("%d %d %d", &n, &m, &k);for (int i = 1; i <= n; ++i)scanf("%d", &a[i]);for (int i = 1; i <= m; ++i)scanf("%d", &b[i]);ll ans = 0;while (k--) {int x, y;scanf("%d %d", &x, &y);int tx = lower_bound(a + 1, a + n + 1, x) - a;int ty = lower_bound(b + 1, b + m + 1, y) - b;if (a[tx] == x && b[ty] == y)continue;//在十字路口else if (a[tx] == x) {//找上面ans += py[ty] - pxy[pii(tx,ty)];py[ty]++;pxy[pii(tx, ty)]++;}else if (b[ty] == y) {//找左边ans += px[tx] - pyx[pii(tx, ty)];px[tx]++;pyx[pii(tx, ty)]++;}}printf("%lld\n",ans);}
}
Educational Codeforces Round 113 (Rated for Div. 2) D. Inconvenient Pairs相关推荐
- Educational Codeforces Round 113 (Rated for Div. 2) D. Inconvenient Pairs 思维
题目大意 给你n条竖直线 m条水平线 k个点 这些点一定在刚才给出的线上 问你有多少个点对 满足之间的距离大于 曼哈顿距离 题目思路 当点在竖直线和水平线的交汇处时 这个点与其他任何点的距离一定等于曼 ...
- Educational Codeforces Round 113 (Rated for Div. 2) ABCD 解题思路
Educational Codeforces Round 113 (Rated for Div. 2) 经典卡CCC秒DDD,可惜了 怪自己特判写错了吧,对式子找了半天问题结果根本不是式子的问题 A ...
- Educational Codeforces Round 113 (Rated for Div. 2) 个人题解 ABCD
A. Balanced Substring 题意 从给定的ababab串中找到任意一个a,ba,ba,b数量相等的子串并输出.如果找不到输出−1−1-1 -1−1−1. 分析 如果一个较大的子串符合要 ...
- Educational Codeforces Round 113 (Rated for Div. 2) A~D题解
文章目录 A. Balanced Substring B. Chess Tournament C. Jury Meeting D. Inconvenient Pairs A. Balanced Sub ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- Educational Codeforces Round 37 (Rated for Div. 2) 1
Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...
- Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)
Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...
- Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)
Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...
最新文章
- 人们对社会与金钱奖赏的预期共享神经环路
- 利用组策略防止计算机访问共享资源
- FeignClient使用
- The Cow Lexicon(POJ-3267)
- Linux块层技术全面剖析-v0.1
- centOS6.4下Percona-XtraBackup的安装
- 1.1.2获取和控制线程状态(Getting and Seeting Thread State)
- AndroidManifest.xml详解(service)
- MySQL递归查询 三种实现方式
- 实现自定义背景色、前景色、显示进度的进度条
- 小白白红队初成长(5)win权限维持
- C#自动注册dll方法
- tp中如何调用科大讯飞的语音转写
- matlab如何根据历年gdp找增长规律,中国历年gdp数据图解 中国历年gdp增长率及人均GDP(1978年-2016年)...
- multi-key map passed in for ordered parameter sort
- 5个最佳开源环境电子邮件客户端
- python中len用法_简单介绍Python中的len()函数的使用
- 室内眩光测量UGR测试系统
- AppiumDesktop学习总结
- oracle查询员工表领导级别,emp表中怎么统计每个员工的领导的年薪,并按年薪由高到低排列...
热门文章
- antd tree 动态添加_CAD的动态块有什么用?(内附教程)
- 运维之道 | Ansible 安装使用
- MX Component -- PLC与PC之通讯
- (附源码)计算机毕业设计ssm公租房管理系统
- 编程c语言 十进制转八进制_使用C编程语言处理八进制值
- java 取当前时间年月日_Java获取当前时间年月日的方法
- MBA案例分析(行销与营销之营销七)
- 高等数学-对无穷小无穷大的理解
- 第39次全国计算机二级vb全真模拟考试系统,计算机等级考试二级VB全真模拟试题...
- 1937.9.18是中秋节的前一天