ARC065(2020.8.3)

A

尛你 \(\%\%\%\)

B

翻译是错的,自闭了好久。先并查集将地铁连接的连通块联通,再枚举每条道路边判断是否在同一连通块即可。

C

这翻译不知道在讲什么,建议看原题面。

可以发现对于每个点以哈密顿距离 \(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\) 的情况考虑,能够简化我们的做法。

D

首先可以发现这样一条性质,被完全包含的线段直接去掉显然是对答案没有影响的,于是我们去掉这些线段后所有线段都将会是一个叠一个的形式。接下来我们可以发现这样一个性质,一个区间有多少种排列方式只与这个区间有多少个 \(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的更多相关文章

  1. 【题解】Atcoder ARC#90 F-Number of Digits

    Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...

  2. AtCoder ARC 076E - Connected?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c 平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次.现在用一条曲线将一对相同的 ...

  3. AtCoder ARC 076D - Built?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...

  4. AtCoder ARC 082E - ConvexScore

    传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c 本题是一个平面几何问题. 在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n} ...

  5. Atcoder ARC 082C/D

    C - Together 传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a 本题是一个数学问题. 有一个长度为n的自然数列a[1..n],对于每一 ...

  6. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

  7. 【题解】Atcoder ARC#96 F-Sweet Alchemy

    首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...

  8. AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision

    题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...

  9. 【题解】Atcoder ARC#67 F-Yakiniku Restaurants

    觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...

  10. 【题解】Atcoder ARC#85 E-MUL

    ……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...

随机推荐

  1. RabbitMQ 七种队列模式

    (1)简单模式(Hello World) 做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B 应用场景: 将发送的电子邮件放到消息队列,然后邮件服务在 ...

  2. RabbitMQ学习笔记五:RabbitMQ之优先级消息队列

    RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java ...

  3. MongoDB基本介绍与安装(1)

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...

  4. AWS修改RDS时区

    查看 RDS 当前时区 默认情况下,AWS 的 RDS 采用的是 UTC 时间.而我们地区一般位于东八区,因此我们本地的时间是 UTC+8. 连接到 RDS 上,查询当前实例的时区. show var ...

  5. [ flask ] flask-restful 实现嵌套的有关系的输出字段

    问题描述: 1. 先说明数据关系:有用户,和菜谱.一个用户可以拥有多个菜谱:一对多的关系 2.  resources/users.py 的输出字段: user_fields = { 'id':fiel ...

  6. 学习Java爬虫文档的学习顺序整理

    1.认识正则表达式(Java语言基础) https://www.toutiao.com/i6796233686455943693/ 2.正则表达式学习之简单手机号和邮箱练习 https://www.t ...

  7. Eclipse配置Maven3.5

    原文: https://www.toutiao.com/i6494558327622599181/ 配置Maven 首先保证Java环境是有的(Maven 3.1以上 要求 JDK 1.6 或以上版本 ...

  8. Visual Studio 2015 MFC之Button颜色变化-断点调试(Debug)

    软件开发,对自己的程序进行调试很重要,本次文章在上一边随笔的基础上,介绍一下Button控件做显示灯的用法,Button控件的添加和变量设置等可以参考下面的的链接:Visaul Studio 2015 ...

  9. 《剑指offer》面试题24. 反转链表

    问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-> ...

  10. 【记录一个问题】在goland中的_test.go文件中,点右键点run,无法执行测试用例

    比较奇怪的是: 在命令行下,用 test -v alloc_test.go -test.run TestAlloc_utilJoinCPUAndGpu alloc.go 可以执行测试用例 比较奇怪的是 ...