Atcoder ARC-125
写的详细的就是我不会做的。。。
A
显然至多有一次移动距离 \(> 1\) 只需判断这个位置在哪里即可。
复杂度 \(\mathcal{O}(n)\)。
B
令 \(x ^ 2 - y = z ^ 2 \Longrightarrow y = (x + z)(x - z)\)。
考虑枚举 \(y\) 计算合法的 \(x\) 的数目,不难发现 \(x\) 合法的充要条件为:
y = ab(a \ge b)\\
a + b \equiv 0 \pmod{2}
\end{cases}
\]
有两种做法:
做法一
观察到 \(b \le a \le \sqrt{n}\),于是考虑枚举 \(b\),转化为统计合法 \((a, b)\) 的数量。
那么显然合法的 \(a\) 的数目可以直接计算得出,复杂度 \(\mathcal{O}(\sqrt{n})\)。
做法二
首先直接忽略 \(b \le a\) 这个条件,只需计算出此时答案与 \(a = b\) 时的答案即可。
后者的数量显然为 \(\lfloor \sqrt{n} \rfloor\),考虑如何计算前者。
考虑枚举 \(a\) 的大小,发现统计的式子可以整除分块,复杂度 \(\mathcal{O}(\sqrt{n})\)。
C
考虑按位贪心,问题在于如何判定是否存在解。
首先容易发现对于任意的排列和给定的任意序列均存在一种构造方式能满足其有解:
我们找到 \(> A_1\) 的那些元素将其从大到小放在 \(A_1\) 之前,然后紧跟着恰好按照 \(A\) 序列的顺序放置,然后再把 \(< A\) 的部分倒序放在最后,容易观察得到这一定是合法的。
由于这是对于排列的判断,因此现在我们就需要找到一种方式使得填完前面的数字后后面的问题为一个子问题。
首先我们有观察(不难证明):
- 第一个数字 \(P_1 \ge A_1\)。
为了字典序最小,我们大胆猜测是否可以选到 \(A_1\)?
答案是肯定的,因为去除掉 \(A_1\) 后剩下的部分我们可以按照原问题的做法得到一个满足要求的解。
但是去掉 \(A_1\) 之后的部分不一定要求 \(\rm LIS\) 一定恰好为 \(|A| - 1\),因为 \(A_1\) 不是 \(1\)。
但我们发现此时 \(1\) 可以紧接着填在序列的第二个位置,证明方法同 \(A_1\) 放置。
那么此时就必须保证第 \(3\) 个位置开始之后的子串 \(\rm LIS\) 必为 \(|A| - 1\),又 \(A_1\) 不为 \(1\),因此这就是一个 \(|A'| = |A| - 1, n' = n - 2\) 的子问题。
于是我们可以考虑递归解决,可以直接循环实现,维护一个当前最小值位置的指针即可,复杂度 \(\mathcal{O}(n)\)。
D
考虑动态维护每个前缀局面每个位置结尾的合法串数量,不妨假设当前考虑到 \([1, s]\) 这个局面,\(f_i\) 为以 \(i\) 结尾的合法串数量。
容易发现对于以一种元素结尾的合法串必定只能出现在 \([1, s]\) 中最后一个出现的位置。
考虑如何扩展这个局面:记 \(l_i\) 为 \(i\) 左侧与其元素权值相同的第一个位置,有转移:
\]
然后发现仅需将 \(f_{l_i}\) 清空即可,使用树状数组维护,复杂度 \(\mathcal{O}(n \log n)\)。
E
不难建出网络流模型,考虑最大流转最小割,枚举每种边删去哪个集合,于是问题转化为:
给定三个序列 \(A, B, C\),最小化:
\]
显然 \(|S|\) 确定的时候一定选择最小的 \(|S|\) 个元素最优,于是将序列按照 \(A\) 排序,等价于求:
\]
此时有观察:\(T\) 集合内的元素选择是独立的,考虑将元素 \(x\) 从 \(T\) 中替换到 \(U_2 - T\) 当中,变化量为:\(-c_x + (n - i)b_x\) 我们希望其变小: \(-c_x + (n - i)b_x \le 0 \Longleftrightarrow \frac{c_x}{b_x} \ge n - i\),于是问题转换为求:
\]
排序后显然随 \(i\) 增合法的 \(j\) 有单调性,双指针维护,复杂度 \(\mathcal{O}(n \log n)\)。
F
首先不难得到一个暴力的做法:令 \(f_{i, j, k}\) 为考虑完前 \(i\) 个节点,当前选出了 \(j\) 个节点,当前选出节点的度数总和为 \(k\) 是否合法,直接转移复杂度 \(\mathcal{O}(n ^ 3)\)。
接下来貌似没有方法继续优化了?根据以往的经验,对于判定型的 \(\rm dp\),优化方法除了基本 \(\rm dp\) 优化方法以外,还有:压位转移和分析可行解的断点数量很少(通常表现为一段区间)。
我们对样例打表观察到 \((x, y)\) 的断点貌似挺多,于是可以考虑换一个量进行打表:\((x, y - x)\) 我们惊奇地发现当 \(y - x\) 固定的时候可行的 \(x\) 真的是一段区间!
考虑尝试证明一下这个结论:为了尽可能拟合上述的结论,我们先令 \(v_i = d_i - 1\) 那么这个时候的权值和就是原本的 \(y - x\)。
与此同时,由于 \((x, y)\) 与 \((x, y - x)\) 构成双射(下面称 \((x, y - x)\) 这样的点对为 \((x, s)\)),因此令 \(v_i = d_i - 1\) 后的问题与原问题的答案一致。
此时我们再来分析 \(s\) 固定时 \(x\) 的最小值 \(L(s)\) 与最大值 \(R(s)\)。
继续观察可以发现:\(L(s)\) 当中一定没有选任何一个 \(v = 0\) 的点,否则一定可以将点数减少;同理 \(R(s)\) 内一定将所有 \(v = 0\) 的点都选上了。
因此我们可以知道 \((L(s), s) \sim (L(s) + z, s), (R(s) - z, s) \sim (R(s), s)\) 一定都是合法的。
接下来我们有如下观察:
- 对于选定的任意的集合 \(S\),令 \(f(S)\) 为其权值和,\(z\) 为 \(v\) 为 \(0\) 的元素个数,那么都有:
\]
右侧的原因是:\(f(S) - |S| \le \sum\limits_{i \in S, v_i > 0} v_i - |S| \le \sum\limits_{v_i > 0} v_i - 1 = n - 2 - (n - z) = z - 2\)
根据上述的性质,不难发现:\(R(s) - L(s) = R(s) - s - (L(s) - s) \le 2z - 2\)。
又我们有第一个区间右端点和第二个区间左端点之差:
\]
这两个区间一定相交且易知包含 \([L(s), R(s)]\) 内的每个元素,因此原命题成立。
此时我们仅需求出权值为 \(s\) 时最少(多)选出的点数即可。
直接做复杂度是 \(\mathcal{O}(n ^ 2)\) 的,但观察到 \(\sum v_i = n - 2\) 因此本质不同的 \(v\) 仅有 \(\sqrt{n}\) 种,于是我们采用单调队列优化多重背包,复杂度 \(\mathcal{O}(n\sqrt{n})\)。
Atcoder ARC-125的更多相关文章
- 【题解】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 ...
随机推荐
- 【Java笔记】Java使用mysql包注意
注意 安装的mysql5.x版本对应 5.x版本的驱动包 安装的mysql8.x版本对应 8.x版本的驱动包 如果安装的MySQL版本和驱动包版本不符合,则Java的连接不了数据库
- Java初学者作业——用户输入一个小数,程序分解出整数部分和小数部分。
返回本章节 返回作业目录 需求说明: 用户输入一个小数,程序分解出整数部分和小数部分. 实现思路: 接收用户控制台输入的小数. 用强制类型转换将整数部分得到. 使用用户输入的小数减去整数部分得到小数部 ...
- Ranger-AdminServer安装(开启Kerberos)
Ranger-AdminServer安装, 同时开启Kerberos安全模式, 基于ranger版本0.7.0. 安装规划 10.43.159.240 zdh-240 10.43.159.245 zd ...
- 使用tomcat搭建HTTP文件下载服务器
使用tomcat搭建HTTP文件下载服务器, 有时我们的应用或者服务需要去外网下载一些资源, 但是如果在内网环境或者网络不好的情况下, 我们可以在内网提供文件下载服务, 将预先下载好的资源放在某个地方 ...
- APP自动化测试之手机滑屏
相信大家在安装一个APP之后,进入之前会有几个页面组成的滑屏欢迎页面,要对这个APP进行自动化测试之前,就需要实现自动滑屏,怎么实现呢?请继续往下看 滑屏分 左滑和右滑,上滑.下滑 实现的原理(左滑) ...
- js- float类型相减 出现无限小数的问题
6.3 -1.1 是不是应该等于5.2? 但是js 会导致得出 5.19999999999的结果 怎么办?可以先先乘100 后相减,然是用方法 舍入为最接近的整数,然后再除于100, Math.rou ...
- Win10编辑Host文件授权问题
今天重温Kafka命令, 使用KafkaTool连接Broker,需要修改主机名,发现host修改时,提示以下错误: C:\Windows\System32\drivers\etc\hosts.txt ...
- 万级K8s集群背后 etcd 稳定性及性能优化实践
1背景与挑战随着腾讯自研上云及公有云用户的迅速增长,一方面,腾讯云容器服务TKE服务数量和核数大幅增长, 另一方面我们提供的容器服务类型(TKE托管及独立集群.EKS弹性集群.edge边缘计算集群.m ...
- Spring Security OAuth2 完全解析 (流程/原理/实战定制) —— Client / ResourceServer 篇
一.前言 本文假设读者对 Spring Security 本身原理有一定程度的了解,假设对 OAuth2 规范流程.Jwt 有基础了解,以此来对 SpringSecurity 整合 OAuth2 有个 ...
- 深入浅出 CSS 动画
本文将比较全面细致的梳理一下 CSS 动画的方方面面,针对每个属性用法的讲解及进阶用法的示意,希望能成为一个比较好的从入门到进阶的教程. CSS 动画介绍及语法 首先,我们来简单介绍一下 CSS 动画 ...