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

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. mybatis 内部定义对象和集合

    mapper 配置文件中  引入两个重要的标签:association和collection标签.

  2. capstoneCS5213|HDMI转VGA带DAV模拟音频输出转换器|CS5213方案

    capstone CS5213是一款HDMI到VGA转换器结合了HDMI输入接口和模拟RGB DAC输出且带支持片上音频数模转换器.CS5213芯片设计简单,整体芯片尺寸精悍,外围电路集成优化度较高, ...

  3. MySQL数据库报错 > 1366 - Incorrect string value: ‘\xE6\xB1\x9F\xE6\x96\x87‘ for column ‘Teacher‘ at row 1

    数据库报错这个多半是数据库在创建的时候没有选择字符编码,导致输入中文的时候出现报错. > 1366 - Incorrect string value: '\xE6\xB1\x9F\xE6\x96 ...

  4. Identity Server 4到今年年底就停止支持了,试一下使用Orchard Core 作为认证服务

    Identity Server 4到今年年底就停止支持了,新的版本需要收费(好像目前是按企业规模,不过将来说不准).我们需要为这种情况做一些技术准备,至少需要为用户多准备一些可选方案.从目前成熟的开源 ...

  5. 不用下载Axure RP Extension for Chrome插件查看原型文件的方法

    Axure RP Extension for Chrome是一款谷歌插件,主要可以用来查看原型文件.以前安装插件的时候总是找半天资源,很麻烦,最近发现了一种新方法可以不用下载插件资源.其实在原型文件中 ...

  6. nuxt写路由接口

    //在server/interface/city.js import Router from 'koa-router'; const router = new Router({ prefix:'/ci ...

  7. 使用 arguments 对象

    arguments 对象表示参数集合,它是一个伪类数组,拥有与数组相似的结构,可以通过数组下标的形式访问函数实参值,但是没有基础 Array 的原型方法. //函数没有定义形参,但是在函数体内通过 a ...

  8. 攻防世界-进阶-[re1-100]

    一.收集程序信息 64位的ELF文件,没有壳 二.放入IDA 使用64位IDA打开文件,先进行静态分析查看伪代码,进入main函数 通过这段可以得知输入的内容存储到了input中(这里我将bufwri ...

  9. AI系统——机器学习和深度学习算法流程

    终于考上人工智能的研究僧啦,不知道机器学习和深度学习有啥区别,感觉一切都是深度学习 挖槽,听说学长已经调了10个月的参数准备发有2000亿参数的T9开天霹雳模型,我要调参发T10准备拿个Best Pa ...

  10. class、抽象类、接口区别

    Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 由于抽象类不 ...