A

可以发现不论往怎样一个串往后加上两个 \(0\) 或两个 \(1\) 其奇数位和偶数位上的差值都是相同的。因此我们两位两位考虑这个 \(01\) 串,对于相邻两位相同那么直接留下,否则留下 \(0\) 即可。

B

每轮直接贪心找一个能使得当前 \(\gcd\) 最大的数往后填即可。

C

为了能找到每个数的取值,我们的第一想法就是找到 \(p_i = n\) 的位置,然后用剩下的数去依次模 \(p_i\) 即可。但你会发现这个 \(p_i = n\) 的位置是很难找到的,但上面这个过程给予了我们提示:对于排列中任意两个数 \(p_i, p_j(p_i < p_j)\),\(p_i \% p_j = p_i, p_j \% p_i < p_i\)。因此,每次我们查询两个位置 \(p_i \% p_j, p_j \% p_i\) 则其中小的哪个数一定为 \(p_i\),但 \(p_j\) 的值并不确定,因此我们还需记录下 \(p_j\) 等待后面的查询。于是我们可以从左到右扫过来,假设当前扫到了 \(i\) 号位置,记录 \(1 \sim i - 1\) 中最大元素的位置 \(j\),每次查询 \(p_i \% p_j, p_j \% p_i\) 即可。最后留下来的哪个数一定最大为 \(n\)。这样的查询次数不超过 \(2n\)。

D

首先可以注意到一个 \(dp\),令 \(dp_i\) 表示跳到 \(i\) 的最小步数,那么有朴素的转移:

\[dp_i = \min(dp_i, dp_j + 1)(\max(a_{i + 1}, \cdots, a_{j - 1}) < \min(a_i, a_j))
\]
\[dp_i = \min(dp_i, dp_j + 1)(\min(a_{i + 1}, \cdots, a_{j - 1}) < \max(a_i, a_j))
\]

首先观察一下第一条转移,你会发现这个转移的条件是非常有特色的。也就是说对于每个 \(i\),其能转移到的 \(j\) 要满足 \(j + 1 \sim i - 1\) 中不存在位置大于等于 \(a_i, a_j\)。换句话而言,也就是 \(j\) 右侧第一个不小于其的位置要不小于 \(i\),并且 \(j\) 也要不小于在 \(i\) 左边第一个不小于其的位置。但这样的限制还是很空泛,依然不能有效加速这个过程。仔细分析一下你会发现,如果 \(i\) 在 \(j\) 右侧第一个不小于 \(a_j\) 的位置左侧,那么一定有 \(a_i < a_j\),显然 \(i\) 左侧第一个比他大的位置一定就是 \(j\);反过来另一种情况就一定可以推得 \(j\) 右侧第一个不小于其的位置一定为 \(i\)。这样转移的次数就会被大大减少了,可以发现能转移到 \(i\) 的位置 \(j\),就是 \(j\) 为 \(i\) 左侧第一个比他大的位置或 \(j\) 右侧第一个不小于这个位置的位置为 \(i\) 的这些 \(j\)。显然上述两个位置可以在单调栈时求出,并且对于第二条转移方程有类似的转移,于是本题就在 \(O(n)\) 的时间复杂度内被解决了。

E

直接按照每条边去确定每个点填的颜色显然是很难做的,因为我们不知道这个点对后面有什么影响,因此需要换一个方向考虑。

我们可以发现 \(n\) 号点不能被到达需要关注于 \(i \rightarrow n\) 的所有点 \(i\)。一个直接的想法是如果 \(i \rightarrow n\) 的边权只有 \(w\) 那么我们一定要把 \(i\) 号点设置为 \(!w\) 会更优。实际上这个想法是正确的,因为:

不论之前到 \(i\) 号点的边怎么选择,都只有到达 \(i\) 号点和不到达两种情况。如果 \(i\) 号点不可到达,显然选择什么都无所谓;如果 \(i\) 号点可到达,那么如果不选 \(!w\) 就一定会到达 \(n\) 了,但选择 \(!w\) 还又可能到不了 \(n\),因此选 \(!w\) 会更优。

于此同时你会发现如果 \(i \rightarrow n\) 的边权 \(0 / 1\) 都有,那么同样利用上面哪个分析过程你会发现选择 \(0 / 1\) 都是无所谓的,因为不论选择什么都能到达 \(n\)。

接下来我们需要从 \(n\) 连到的边回到整张图,你会发现上面的过程给了我们很大的提示去将这张图的所有边反向,那么我们接下来将这张图反向过来看。你会发现假如当前还是有一些点能到达 \(n\),那么如果我们要使这些点都不能到达,显然选择先后考虑的顺序是不会影响结果的。退一步讲,如果存在其中一些点是怎样都可以到达的,那么我们的任务是需要最大化整张图的最短路。那么我们肯定要贪心地让最短路最小点能到达的边断掉,否则经过这个点点必然可以变为最短路。并且由于先后考虑的顺序不会产生影响,因此我们直接贪心选取当前最短路最小的点出来让它所连的边能断则断,再将不能断的点加入当前考虑的范畴即可。因为边权大小都是 \(1\) 的,于是我们直接使用 \(bfs\) 实现即可。时间复杂度 \(O(n + m)\)。

CF Round #669 Div2的更多相关文章

  1. CF Round #580(div2)题解报告

    CF Round #580(div2)题解报告 T1 T2 水题,不管 T3 构造题,证明大约感性理解一下 我们想既然存在解 \(|a[n + i] - a[i]| = 1\) 这是必须要满足的 既然 ...

  2. CF round #622 (div2)

    CF Round 622 div2 A.简单模拟 B.数学 题意: 某人A参加一个比赛,共n人参加,有两轮,给定这两轮的名次x,y,总排名记为两轮排名和x+y,此值越小名次越前,并且对于与A同分者而言 ...

  3. [CF Round #295 div2] C. DNA Alignment 【观察与思考0.0】

    题目链接:C. DNA Alignment 题目大意就不写了,因为叙述会比较麻烦..还是直接看英文题面吧. 题目分析 经过观察与思考,可以发现,构造的串 T 的每一个字符都与给定串 S 的每一个字符匹 ...

  4. [CF Round #294 div2] E. A and B and Lecture Rooms 【树上倍增】

    题目链接:E. A and B and Lecture Rooms 题目大意 给定一颗节点数10^5的树,有10^5个询问,每次询问树上到xi, yi这两个点距离相等的点有多少个. 题目分析 若 x= ...

  5. [CF Round #294 div2] D. A and B and Interesting Substrings 【Map】

    题目链接:D. A and B and Interesting Substrings 题目大意 给定26个小写字母的权值,一共26个整数(有正有负). 给定一个小写字母组成的字符串(长度10^5),求 ...

  6. A. Grasshopper And the String(CF ROUND 378 DIV2)

    A. Grasshopper And the String time limit per test 1 second memory limit per test 256 megabytes input ...

  7. A. Alyona and Numbers(CF ROUND 358 DIV2)

    A. Alyona and Numbers time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. CF Round#436 div2

    额,这次的题目其实挺智障的.所以通过这次比赛,我也发现了自己是一个智障.... 不说太多,说多是泪... A. Fair Game 题意:给你一个数组,看你能否把它均分为两个所有元素均相同的子数组. ...

  9. CF Round #569 Div2(contest1180)

    比赛链接:http://codeforces.com/contest/1180 Problem A 题意:给出n,问方块数.看图理解... Solution: 找一找规律就可以了,发现方块数为2n*( ...

随机推荐

  1. Boost的反射库PFR

    目录 目录 简介 使用方法 限制 总结 简介 Boost.PFR是一个Boost 1.75版本出的C++14的基础反射库,其使用非常简单,非常便捷,但是适用性也比较差,有很多的地方无法使用,适合比较简 ...

  2. 第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么

    第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么 Sigma协议 Sigma协议是Alice想要向Bob证明一些东西的协议(Alice知道一些秘密).他们有下面的一般范式:Al ...

  3. 大数据分布式存储之Cassandra

    分布式存储区别于集中式数据库存储,通过网络将海量数据存储到企业的各个数据节点(可能分布到不同的数据中心或机架上): 分布式存储需要考虑的问题 元数据管理 元数据是指数据本身的标识,通过元数据能很快的找 ...

  4. Reflection 基础知识(二)

    Proxy 定义 Proxy用于修改对象的某些行为,获取值,设置值等 let p = new Proxy(target, handler); target 用Proxy包装的目标对象(可以是任何类型的 ...

  5. 【优雅代码】03-optional杜绝空指针异常

    [优雅代码]03-optional杜绝空指针异常 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺 ...

  6. 前端必备,5大mock省时提效小tips,用了提前下班一小时

    ​ 一.一些为难前端的业务场景 在我的工作经历里,需要等待后端童鞋配合我的情形大概有以下几种: a.我们跟外部有项目合作,需要调用到第三方接口. 一般这种情况下,商务那边谈合同,走流程,等第三方审核, ...

  7. nano 编辑器快速入门

    # 打开或新建一个文件 $ nano tmp.txt # 常用组合按键 ^G:获取帮助 ^X:退出,如果文件有改定会提示是否保存 ^O:保存文件内容 ^R:读取其他文件的内容,放入到当前文件中 ^W: ...

  8. spring security 在controller层 方法级别使用注解 @PreAuthorize("hasRole('ROLE_xxx')")设置权限拦截 ,无权限则返回403

    1.前言 以前学习的时候使用权限的拦截,一般都是对路径进行拦截 ,要么用拦截器设置拦截信息,要么是在配置文件内设置拦截信息, spring security 支持使用注解的形式 ,写在方法和接口上拦截 ...

  9. VMware 创建的虚拟机,Xshell无法进行连接

    使用场景: 在VMware 创建了Centos7后,Xshell一直连接不上,如果排查以下问题还是不行.就可以用这种方法了 1.配置了静态地址 2.VMware配置了NAT映射,划分了网段后 3.检查 ...

  10. centos7 系统级别(持续更新)

    查看当前系统级别 runlevel 获取当前级别 systemctl get-default centos7中只能通过target来设置.先获取target列表 ls -l /usr/lib/syst ...