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相关推荐

  1. Educational Codeforces Round 113 (Rated for Div. 2) D. Inconvenient Pairs 思维

    题目大意 给你n条竖直线 m条水平线 k个点 这些点一定在刚才给出的线上 问你有多少个点对 满足之间的距离大于 曼哈顿距离 题目思路 当点在竖直线和水平线的交汇处时 这个点与其他任何点的距离一定等于曼 ...

  2. Educational Codeforces Round 113 (Rated for Div. 2) ABCD 解题思路

    Educational Codeforces Round 113 (Rated for Div. 2) 经典卡CCC秒DDD,可惜了 怪自己特判写错了吧,对式子找了半天问题结果根本不是式子的问题 A ...

  3. Educational Codeforces Round 113 (Rated for Div. 2) 个人题解 ABCD

    A. Balanced Substring 题意 从给定的ababab串中找到任意一个a,ba,ba,b数量相等的子串并输出.如果找不到输出−1−1-1 -1−1−1. 分析 如果一个较大的子串符合要 ...

  4. 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 ...

  5. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  6. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  7. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  8. 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这个时候两 ...

  9. 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, ...

最新文章

  1. 人们对社会与金钱奖赏的预期共享神经环路
  2. 利用组策略防止计算机访问共享资源
  3. FeignClient使用
  4. The Cow Lexicon(POJ-3267)
  5. Linux块层技术全面剖析-v0.1
  6. centOS6.4下Percona-XtraBackup的安装
  7. 1.1.2获取和控制线程状态(Getting and Seeting Thread State)
  8. AndroidManifest.xml详解(service)
  9. MySQL递归查询 三种实现方式
  10. 实现自定义背景色、前景色、显示进度的进度条
  11. 小白白红队初成长(5)win权限维持
  12. C#自动注册dll方法
  13. tp中如何调用科大讯飞的语音转写
  14. matlab如何根据历年gdp找增长规律,中国历年gdp数据图解 中国历年gdp增长率及人均GDP(1978年-2016年)...
  15. multi-key map passed in for ordered parameter sort
  16. 5个最佳开源环境电子邮件客户端
  17. python中len用法_简单介绍Python中的len()函数的使用
  18. 室内眩光测量UGR测试系统
  19. AppiumDesktop学习总结
  20. oracle查询员工表领导级别,emp表中怎么统计每个员工的领导的年薪,并按年薪由高到低排列...

热门文章

  1. antd tree 动态添加_CAD的动态块有什么用?(内附教程)
  2. 运维之道 | Ansible 安装使用
  3. MX Component -- PLC与PC之通讯
  4. (附源码)计算机毕业设计ssm公租房管理系统
  5. 编程c语言 十进制转八进制_使用C编程语言处理八进制值
  6. java 取当前时间年月日_Java获取当前时间年月日的方法
  7. MBA案例分析(行销与营销之营销七)
  8. 高等数学-对无穷小无穷大的理解
  9. 第39次全国计算机二级vb全真模拟考试系统,计算机等级考试二级VB全真模拟试题...
  10. 1937.9.18是中秋节的前一天