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. 难搞的偏向锁终于被 Java 移除了

    背景 在 JDK1.5 之前,面对 Java 并发问题, synchronized 是一招鲜的解决方案: 普通同步方法,锁上当前实例对象 静态同步方法,锁上当前类 Class 对象 同步块,锁上括号里 ...

  2. LT7211替代芯片|低BOM成本替代LT7211 EDP转LVDS转换设计芯片CS5211

    LT7211B是一种用于虚拟现实/显示应用的TYPE-C/DP1.2转LVDS转换芯片.LT7211B 对于DP1.2输入,LT7211B可以配置为1.2.4车道,还支持车道交换功能.自适应均衡使其适 ...

  3. 为什么操作dom会消耗性能

    因为对DOM的修改为影响网页的用户界面,重绘页面是一项昂贵的操作.太多的JavaScript DOM操作会导致一系列的重绘操作,为了确保执行结果的准确性,所有的修改操作是按顺序同步执行的.我们称这个过 ...

  4. 编写Java程序,在电脑硬盘里,查看 f:\text4\name 目录是否存在。

    查看本章节 查看作业目录 需求说明: 在电脑硬盘里,查看 f:\text4\name 目录是否存在.如果不存在,则创建该目录:如果存在,则查找 readme.txt文件是否存在.如果 readme.t ...

  5. Java面向对象笔记 • 【第10章 Swing编程初级应用】

    全部章节   >>>> 本章目录 10.1 JFrame窗口容器 10.1.1 Swing介绍 10.1.2 JFrame窗口容器应用 JFrame常用方法 10.1.3 实践 ...

  6. 编写Java程序,使用菜单组件制作一个记事本编辑器

    返回本章节 返回作业目录 需求说明: 使用菜单组件制作一个记事本编辑器 实现思路: 创建记事本菜单工具栏JMenuBar. 创建多个菜单条JMenu. 创建多个菜单项JMenuItem. 将菜单添加至 ...

  7. C#/.NET之WebAPI(从入门到放弃一)

    1.怎么理解WebApi,他究竟是什么? 关于这一篇,视频学习可参照B站up主:全栈ACE,全栈ACE的个人空间,社区QQ群如下,有什么问题也可加群咨询. 首先使用Visual Studio创建一个新 ...

  8. 来自MyBatis不一样收获结果的探索之旅-v3.5.9

    概述 定义 MyBatis官网 https://mybatis.org/mybatis-3/ 最新版本为3.5.9 MyBatis是一个的ORM框架,支持自定义SQL.存储过程和高级映射.MyBati ...

  9. python日志按天分割,保存近一个月日志,日志自动清理

    python日志按天分割,保存近一个月日志 import os import logging import re from logging.handlers import TimedRotatingF ...

  10. Cannot uninstall 'pyparsing'. It is a distutils installed project

    我的环境: [root@ansible ~]# python -V Python 2.7.5 [root@ansible ~]# cat /etc/redhat-release CentOS Linu ...