A

不难发现从 \(5\) 开始一直往 \(6\) 转再转回来是最优的,直接模拟即可。

B

不难发现可以将多余部分直接贪心消去,最后必然会剩下两个或 \(1\) 个多余的数。

如果剩下两个,此时多余的数必然是偶数个,取之前序列中和这两个数中一个相等的数即可将这两个数消去,不浪费一个数。

否则,此时多余的数必然是奇数个,一定需要找到和这一个数相等的数和另一个数,需要浪费一个数。

C

首先的一个想法是对于一个商品 \([l, r]\) 将 \(l \rightarrow r\) 之间的每个数加 \(1\),然后对于每辆车直接调和级数查询。

不难发现这样会记重,因为可能一辆车能跳到的位置可能会被一间商品覆盖多次。

那么一个很直接的想法就是思考怎么才能不计重。

那么对于一件商品 \([l, r]\) 和第 \(d\) 辆车,当且仅当存在若干个 \(d\) 的倍数在 \([l, r]\) 之间时才会被记重。

一个很直接的想法就是只让这若干个倍数只有一个被记录,为了方便,我们考虑只记录第一个包含在 \([l, r]\) 内 \(d\) 的倍数。

假设第一个在区间内 \(d\) 的倍数为 \(kd\),那么不难发现这个区间的左端点必然处于 \(((k - 1)d, kd]\) 之间,右端点必然在 \([kd, m]\) 之间。

于是问题就转化为,对于 \(d\) 的每个倍数 \(kd\),求出左端点在 \(((k - 1)d, kd]\) 之间,右端点在 \([kd, m]\) 之间的区间个数。

我们限制一方的端点,不难发现问题进一步转化为限制右端点在 \([kd, m]\) 的区间中,左端点在 \(((k - 1)d, kd]\) 之间的区间个数。

不难发现将区间挂在右端点上,直接主席树即可,复杂度 \(O(n \log ^ 2 n)\)。

然而有没有更为简单的方法呢,答案是有的。

需要发现这样一条性质,对于一个区间 \([l, r]\) 令 \(len = r - l + 1\),那么对于 \(d \ge len\) 的车辆,一定可以获得该区间的商品。

这意味着对于每辆车 \(d\),\(r - l + 1 \ge d\) 的区间我们是不需要处理去重的问题的,只需要在答案上加上这部分商品的数量即可。

那么对于 \(r - l + 1 < d\) 的区间呢?

不难发现这样的区间最多只会包含一个 \(d\) 的倍数,因此这部分也是不需要去重的,直接统计即可。

实现时将区间按照长短排序,双指针扫过来,使用树状数组动态加入线段,复杂度 \(O(n \log ^ 2 n)\)。

D

近期的一些 \(dp\) 题 中已经详细记录了本题 \(O(n ^ 2)\) 的 \(dp\) 解法,下面是一个基于 \(dp\) 的 \(O(n)\) 优化。

观察一下 \(dp\) 方程:

\[dp_{i, j} = \sum\limits_{k \ge j} dp_{i - 1, k}(j \ne 1, j \le n - i + 1)
\]
\[dp_{i, j} = \sum\limits_{k > j} dp_{i - 1, k}(j = 1, j \le n - i + 1)
\]

事实上这个 \(dp\) 的转移方程是具有组合意义的,首先不看方程后面的限制,不难发现这是从 \(n + 1\) 走到 \(1\) 恰好走 \(k\) 步的方案数。

为了方便起见,我们将这个过程倒过来看,看作是从 \(0\) 开始走 \(k\) 步走到 \(n\) 的方案。

那么那两个多余的限制就等价于最后一步走的步数必须不为 \(0\) 且对于每一个走了 \(i\) 步的位置,满足之前一共走的步数不能低于 \(i\) 步。

单看后面这个限制是一个经典的组合数问题,将问题具体化放到坐标系下看待。

那么问题就等价于从 \((0, 0)\) 开始走到 \((k, n)\) 走 \(k\) 步,每一步横坐标必须 \(+1\) 纵坐标无限制,且这整条路线必须在 \(y = x\) 之上的方案。

如果没有在 \(y = x\) 之上这条限制,答案就相当于解一个非负整数不定方程的解,运用插板法即为 \(\dbinom{n + k - 1}{n}\)。

下面来考虑存在一段路线在 \(y = x\) 之下的非法情况。

将 \(y = x\) 下移一个单位长度,变成 \(y = x - 1\)。

取 \((0, 0)\) 关于 \(y = x - 1\) 的对称点 \((1, -1)\),不难发现每一个非法的走法都必然会经过 \(y = x - 1\),令第一次经过的点为 \(A\)。

将从 \((0, 0)\) 开始一直到 \(A\) 的这条路线翻折,都会唯一对应一条从 \((1, -1)\) 开始沿着这条翻折路线再沿着前者在 \(A\) 之后走的路线。

由此不难证明从 \((0, 0)\) 走到 \((k, n)\) 的非法路径,和从 \((1, -1)\) 走到 \((k, n)\) 的所有路径组成的集合是相等的。

因此所有的非法方案就等于从 \((1, -1)\) 走到 \((k, n)\) 的任意一个方案,方案数即为 \(\dbinom{n + k - 1}{n + 1}\)。

因此只考虑后面一个限制的答案即为:

\[F_{k, n} = \dbinom{n + k - 1}{n} - \dbinom{n + k - 1}{n + 1}
\]

再来考虑前一条限制的情况。

可以发现,如果前面一条限制是不满足的,那么这条路线必然会经过 \((k - 1, n)\) 这个点,于是我们直接容斥即可得到答案:

\[Ans = F_{k, n} - F_{k - 1, n}
\]

复杂度 \(O(n)\),瓶颈在于计算组合数上。

Atcoder ARC-068的更多相关文章

  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. 『动善时』JMeter基础 — 59、进行JMeter分布式测试遇到的坑

    目录 1.控制机端 (1)执行机没有关闭防火墙 (2)内存溢出 2.执行机端 (1)启动jmeter-server服务情况一 (2)启动jmeter-server服务情况二 (3)启动jmeter-s ...

  2. matplotlib 进阶之Legend guide

    目录 matplotlib.pyplot.legend 方法1自动检测 方法2为现有的Artist添加 方3显示添加图例 控制图例的输入 为一类Artist设置图例 Legend 的位置 loc, b ...

  3. Dimension reduction in principal component analysis for trees

    目录 问题 重要的定义 距离 支撑树 交树 序 tree-line path 重要的性质 其它 Alfaro C A, Aydin B, Valencia C E, et al. Dimension ...

  4. CS5266代替AG9311|Type C转HDMI带PD3.0转换芯片|AG9311替代方案

    ALGOLTEK AG9311是一款带PD3.0 Type C转HDMI的转换芯片,它主要用于usb Type-c拓展坞以及多功能usb Type-c转换器等产品设计当中,台湾瑞奇达新推出的CS526 ...

  5. Java初学者作业——编写Java程序,输入一个学生的5门课程的成绩,求其平均分。

    返回本章节 返回作业目录 需求说明: 编写Java程序,输入一个学生的5门课程的成绩,求其平均分.计算平均成绩,需要将每一门课程的成绩逐步累加到总成绩中,使用 for 循环实现,然后求出平均分. 实现 ...

  6. 安装rebar3

    下载编译好的版本 wget https://s3.amazonaws.com/rebar3/rebar3 chmod +x /home/hylink/rebar3 (赋权) ./rebar3 loca ...

  7. 解决windows update失败,正在还原的问题

    其实这个不算问题,等上几个小时,还原完毕就好了,不过也有快速解决的办法. 所需工具:U盘.光盘等可以进入PE系统的工具,dism++软件 1.下载dism++工具,根据你的系统,选择使用32位还是64 ...

  8. 首次分享,大厂资深测试做Api接口自动化测试的关键思路都在这里了

    引言 与UI相比,接口一旦研发完成,通常变更或重构的频率和幅度相对较小.因此做接口自动化的性价比更高,通常运用于迭代版本上线前的回归测试中. 手工做接口测试,测试数据和参数都可以由测试人员手动填写和更 ...

  9. SpringBoot 之 实现登录功能及登录拦截器

    增加登录退出控制器: # src/main/java/com/wu/controller/LoginController.java @Controller public class LoginCont ...

  10. STM32新建模板之库文件

    一.新建项目文件夹 在桌面创建项目文件夹,用于存放工程,命名为"stm32f10x_project" 在项目文件夹中创建3个文件夹,分别命名为:CMSIS.OUTPUT.STM32 ...