Atcoder ARC-065
ARC065(2020.8.3)
尛你 \(\%\%\%\)
翻译是错的,自闭了好久。先并查集将地铁连接的连通块联通,再枚举每条道路边判断是否在同一连通块即可。
这翻译不知道在讲什么,建议看原题面。
可以发现对于每个点以哈密顿距离 \(d\) 画圆是一个以该点为几何中心,将对角线长度为 \(2d\) 的正方形旋转 \(45 \degree\) 的一个图形。可以发现我们要做的实际上是一个 \(bfs\) 的扩展过程,现在问题转化为如何快速求出满足条件的点的数量,不难发现这实际上是统计四条线段上的点的个数,并且这四条线段斜率都为 \(+1 / -1\) 实际上这样的直线都是有非常优秀的性质的,可以发现这些直线上的点都会满足 \(x + y = k / x - y = k\) 的性质,于是我们可以考虑分别维护斜率为 \(+1, -1\) 的直线,将每个点按照截距为第一关键字 \(x\) 为第二关键字排序,每次查询只需要在数组上 \(lower\_bound / upper\_bound\) 即可。但为了保证复杂度正确,我们只能让每个点入队一次,因此还需要开个 \(set\) 实时维护剩余的点,注意可能顶点上会算两次,在查询斜率为 \(-1\) 的直线时将左边界 \(+1\) 右边界 \(-1\) 即可。
看了题解后学到一种更为牛逼的做法,可以发现我们不好统计是因为这些线段是有斜率的,我们可以直接旋转坐标轴,让直线没有斜率。例如在本题中,我们坐标轴整体向右旋转 \(45 \degree\),接下来我们可以使用相似将新点坐标算出来,但此时坐标中可能带有 \(\sqrt{2}\) 这样不方便统计,于是我们可以再将点坐标整体放大 \(\sqrt{2}\) 倍,那么再根据相似可以发现每个点会从 \((x, y)\) 到 \((x - y, x + y)\)。那么我们现在就只需要统计正着的正方形上的点即可,分横着的线和竖着的线维护,以竖着的为例,按照 \(x\) 为第一关键字 \(y\) 为第二关键字排序,每次在数组上二分统计答案,遍历 \(set\) 暴力删除即可。
这种旋转坐标轴的方式貌似叫做曼哈顿距离转切比雪夫距离,这种做法的好处就是不论斜率为多少我们可以转化为斜率为 \(0\) 的情况考虑,能够简化我们的做法。
首先可以发现这样一条性质,被完全包含的线段直接去掉显然是对答案没有影响的,于是我们去掉这些线段后所有线段都将会是一个叠一个的形式。接下来我们可以发现这样一个性质,一个区间有多少种排列方式只与这个区间有多少个 \(1\) 有关,于是我们就有了下面这个 \(dp\),令 \(dp_{i, j}\) 为到第 \(i\) 条线段,当前还剩余 \(j\) 个 \(1\) 的方案数,可以发现我们每次转移需要确定的是这条线段和上条线段左端点之间的部分,于是我们可以枚举给这部分放多少个 \(1\),于是就有转移 \(dp_{i, j} = \sum\limits_{k = 0} ^ {\min(j, l_i - l_{i - 1})} dp_{i - 1, j - (sum_{r_i} - sum_{r_{i - 1}}) + k} \times \dbinom{l_i - l_{i - 1}}{k}\) 这个 \(dp\) 复杂度看起来是 \(O(n ^ 3)\) 的,但貌似 \(k\) 每次枚举的上界是 \(l_i - l_{i - 1}\),因此这个 \(dp\) 的复杂度其实应该是 \(O(n ^ 2)\) 的。
题解的做法更为简单,考虑每次只确定一位选或不选,令 \(dp_{i, j}\) 为当前确定了前 \(i\) 个位置,还剩下 \(j\) 个 \(1\) 可选,转移就非常简单了,注意一下边界情况就可以了。其实这两种做法的本质是一样的,只是具体的实现方式有所不同。
Atcoder ARC-065的更多相关文章
- 【题解】Atcoder ARC#90 F-Number of Digits
Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...
- AtCoder ARC 076E - Connected?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c 平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次.现在用一条曲线将一对相同的 ...
- AtCoder ARC 076D - Built?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...
- AtCoder ARC 082E - ConvexScore
传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c 本题是一个平面几何问题. 在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n} ...
- Atcoder ARC 082C/D
C - Together 传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a 本题是一个数学问题. 有一个长度为n的自然数列a[1..n],对于每一 ...
- 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...
- 【题解】Atcoder ARC#96 F-Sweet Alchemy
首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...
- AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision
题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...
- 【题解】Atcoder ARC#67 F-Yakiniku Restaurants
觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...
- 【题解】Atcoder ARC#85 E-MUL
……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...
随机推荐
- .NET+Sqlite如何支持加密
.NET+Sqlite如何支持加密 Sqlite SQLite 来源于公共领域 SQLite Is Public Domain. 确保代码不会受到任何专有或许可内容的污染,没有任何来自互联网上的未知来 ...
- Kronecker Products and Stack Operator
目录 定义 Stack Operator Kronecker Product 性质 Stack Operator Kronecker Product 半线性 Whitcomb L. Notes on ...
- matplotlib 高阶之path tutorial
目录 Bezier example 用path来画柱状图 随便玩玩 import matplotlib.pyplot as plt from matplotlib.path import Path i ...
- 使用 JavaScript 的 HTML 页面混合、根据在下拉列表框中选择的内容,决定页面效果,用户在下拉列表框中选择页面将要使用的背景颜色
查看本章节 查看作业目录 需求说明: 根据在下拉列表框中选择的内容,决定页面效果 用户在下拉列表框中选择页面将 要使用的背景颜色 当用户选择橙色时,页面背景将显示为橙色 实现思路: 用表单 <s ...
- MySQL测试题——开发公司人事管理系统,包括 Employee表 和 Department表
一.需求分析 我们的开发团队,计划开发一款公司人事管理软件,用于帮助中小型企业进行更加高效的人事管理.现在需要对数据库部分进行设计和开发,根据对需求和立项的分析,我们确定该数据库中最核心的两个表为员工 ...
- 啥是Gossip协议?
你好呀,我是歪歪. 元旦的时候我看到一个特别离谱的谣言啊,具体是什么内容我就不说了,我怕脏了大家的眼睛. 但是,我看到一个群里传的那叫一个绘声绘色,大家讨论的风生水起的,仿佛大家就在现场似的. 这事吧 ...
- UTF-8,GBK,ANSI之间的关系和区别
GBK应该是属于ANSI之中的,在ANSI的国际通用集,GBK是专门来解决中文编码的,是双字节的,不论中英文都是双字节,而UTF-8是才用的另外的一种编码方式,对英文是用8位,对中文使用24位,是和A ...
- 使用.NET 6开发TodoList应用(22)——实现缓存
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 有的时候为了减少客户端请求相同资源的逻辑重复执行,我们会考虑使用一些缓存的方式,在.NET 6中,我们可以借助框架提供的中间件 ...
- epoll实现原理
作者:蓝形参链接:https://www.zhihu.com/question/20122137/answer/14049112来源:知乎 首先我们来定义流的概念,一个流可以是文件,socket,pi ...
- 细谈 == 和 equals 的具体区别 【包括equals源码分析】
1.前言 昨天舍友去面试,被面试官的问题难住了:俩个学生类除了学生姓名不同用.equal来比较. 我是一脸懵逼的 ,问题说的很模糊 , 理解字面意思为 :一个 实体类名叫Student ,内部属性有学 ...