写的详细的就是我不会做的。。。

A

显然至多有一次移动距离 \(> 1\) 只需判断这个位置在哪里即可。

复杂度 \(\mathcal{O}(n)\)。

B

令 \(x ^ 2 - y = z ^ 2 \Longrightarrow y = (x + z)(x - z)\)。

考虑枚举 \(y\) 计算合法的 \(x\) 的数目,不难发现 \(x\) 合法的充要条件为:

\[\begin{cases}
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_i = \sum\limits_{j = l_i} ^ {i - 1} f_j + [l_i = 0]
\]

然后发现仅需将 \(f_{l_i}\) 清空即可,使用树状数组维护,复杂度 \(\mathcal{O}(n \log n)\)。

E

不难建出网络流模型,考虑最大流转最小割,枚举每种边删去哪个集合,于是问题转化为:

给定三个序列 \(A, B, C\),最小化:

\[\min\limits_{S \subseteq U_1, T \subseteq U_2} A(S) + C(T) + (n - |S|)B(U_2 - T)
\]

显然 \(|S|\) 确定的时候一定选择最小的 \(|S|\) 个元素最优,于是将序列按照 \(A\) 排序,等价于求:

\[\min\limits_{0 \le i \le n, T \subseteq U_2} \sum\limits_{j = 1} ^ i A_j + C(T) + (n - i)B(U_2 - T)
\]

此时有观察:\(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\),于是问题转换为求:

\[\min\limits_{0 \le i \le n} \sum\limits_{j = 1} ^ i A_j + \sum\limits_{\frac{c_j}{b_j} \le n - i} c_j + (n - i)\sum\limits_{\frac{c_j}{b_j} > n - i}b_j
\]

排序后显然随 \(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\) 的元素个数,那么都有:
\[-z \le f(S) - |S| \le z - 2
\]

右侧的原因是:\(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(z) + z - R(s) + z \ge 2z - (2z - 2) \ge 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的更多相关文章

  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. 据库自增ID用完

    Mysql里int类型是4个字节,如果有符号位的话就是[-2^31,2^31-1],无符号位的话最大值就是2^32-1,也就是4294967295. 自增ID达到上限用完了之后,分为两种情况: 如果设 ...

  2. 【Java】质数判断

    static boolean isPrime(int n) { if(n<=1) { return false; } if(n==2||n==3) { return true; } if(n%6 ...

  3. Morphological Image Processing

    目录 概 reflection and translation Erosion and Dilation Erosion 示例 skimage.morphology.erosion dilation ...

  4. Chapter 1 A Definition of Causal Effect

    目录 1.1 Individual casual effects 1.2 Average casual effects 1.5 Causation versus association Hern\(\ ...

  5. .NET 云原生架构师训练营(ASP .NET Core 整体概念推演)--学习笔记

    演化与完善整体概念 ASP .NET Core 整体概念推演 整体概念推演到具体的形式 ASP .NET Core 整体概念推演 ASP .NET Core 其实就是通过 web framework ...

  6. html+css+JavaScript实现爱恩斯坦棋游戏

    title: "html+css+JavaScript实现爱恩斯坦棋游戏" author: Sun-Wind date: December 30, 2021 背景:本贴将基于前端的 ...

  7. HTML网页设计基础笔记 • 【第7章 盒子模型】

    全部章节   >>>> 本章目录 7.1 盒子模型原理 7.1.1 盒子模型概述 7.1.2 盒子的大小 7.1.3 盒子之间的关系 7.2 标准文档流 7.2.1 标准文档流 ...

  8. mysql总结笔记 -- 索引篇

    索引的作用 索引是用来高效的获取数据的 排好序 的 数据结构,如果没有索引,可能会导致查询某一条记录的时候遍历整张表:所以适当的索引可以大大的提升检索速度: 索引的数据结构 二叉树 假如说我们有一列数 ...

  9. Count Sequences

    \(考虑问题的转换,即把用n个球,分为r-l+2个部分,其中第1部分表示该区域的球值为l,第二部分表示该区域的球值为l+1\) \(......第r-l+2部分为不选该区域的球\) \(该问题等价于在 ...

  10. 用一道题 来 复习 MySQL 的 复杂 sql 语句

    1.前言 太久没有在数据库做一些复杂的sql了,基本上将数据库的查询逻辑全放在了Java里做, 一来呢,可以减轻数据库的负担,二来呢,在java写,逻辑感会更强,数据类型更丰富也容易操作. 然而... ...