由于今天实在是太自闭了就前来写场已经 AK 的 div.2 的题解了

这场比赛是我的 div.2 首 AK 哦

A

先特判 \(b=1\),强制将 \(b+1\)

否则容易发现答案最大为 \(\log_ab\),所以直接枚举 \(b\) 加了多少次,枚举到 \(30\) 就行了。

B

考虑一个数组 \([a_1,a_2,\dots,a_n]\) 有多少个与其 \(k\)-similar 的数组。

对于 \(2\leq i\leq n-1\),如果我们替换 \(a_i\) 为 \(x\),那么必须有 \(a_{i-1}<x<a_{i+1}\) 且 \(x\neq a_i\),共有 \(a_{i+1}-a_{i-1}-2\) 种选择。

如果我们替换 \(a_1\) 为 \(x\),那么必须有 \(1\leq x<a_2\) 且 \(x\neq a_1\),有 \(a_2-2\) 种选择,替换 \(a_n\) 也同理。

故答案为 \(a_{l+1}-2+k-1-a_{r-1}+\sum\limits_{i=l+1}^{r-1}a_{i+1}-a_{i-1}-2\),前缀和维护一下即可。

注意特判 \(l=r\)。

C

现场降智了写了个整除分块。。。

设 \(r=a\bmod b\),注意到 \(a=br+r=(b+1)r\leq x\),而 \(b>r\),故 \(r(r+1)<x\)。

考虑直接枚举 \(r\),那么我们就要统计 \(r<b\leq y\) 且 \((b+1)r\leq x\) 的 \(b\) 有多少个。显然为 \(\max(0,\min(y,\lfloor\dfrac{x}{r}\rfloor-1)-c)\)

D

这题 tm 竟然卡了我 40min

暴力显然是不行的,不过我们发现一个性质,那就是 \(1\sim 16\) 的 LCM 为 \(720720\),并且 \(16^4<720720<10^6\)

于是考虑黑白染色,白色格子填 \(720720\),黑色格子填 \(720720-x^4\),这样就符合题目的条件了。

E

首先注意到红色棋子移动的路线一定是从根节点开始,向下移动一段距离到达某个点 \(x_1\),然后跳到同一深度的某一点 \(y_1\),然后再向下移动一段距离到达某个点 \(x_2\),然后再跳到某个 \(y_2\),以此类推直到到达叶子节点。

于是考虑 \(dp\),我们设 \(dp_i\) 表示红色棋子走到 \(i\) 处的答案的最大值。

但发现这样不好表示当前深度是否进行了交换,于是考虑换个状态,\(dp1_i\) 表示红色棋子位于 \(i\),并且在当前深度没有进行交换的最大值,\(dp2_i\) 表示红色棋子位于 \(i\),并且在当前深度已经进行了交换的最大值。

状态转移方程:

\(dp1_i=\max(dp1_{fa_i}+mxv_{fa_i},dp2_i)\)

\(dp2_i=\max\limits_{j\ \text{与}\ i\ \text{在同一深度}}dp1_j+|a_j-a_i|\)

一看就懂。

其中 \(mxv_i\) 表示在与 \(i\) 同一深度的点 \(j\) 中 \(|a_j-a_i|\) 的最大值,显然 \(j\) 要么是与 \(i\) 同一深度中的点中权值最大的,要么是与 \(i\) 同一深度的点中权值最小的。

但是朴素地计算 \(dp2_i\) 最坏可达 \(n^2\)。不过注意到当 \(a_j<a_i\) 时的贡献为 \(dp1_j+a_i-a_j\),\(a_j>a_i\) 时的贡献为 \(dp1_j+a_j-a_i\),于是我们考虑将每一深度的点的权值从小到大排序,然后从小到大、从大到小各扫一遍并实时分别维护 \(dp1_j-a_j\),\(dp1_j+a_j\) 的最大值,这样转移复杂度就讲到 \(n\log n\) 了。

F

一道水水的 F。

首先求一遍 \(b\) 数组的前缀和 \(s_i\)

考虑一个 naive 的 dp 状态,\(dp_{i,j}\) 表示填了前 \(i\) 个位置,上一个 \(a_j\neq b_j\) 的位置为 \(j\)。

那么有转移方程式:

\(\begin{cases}dp_{i,j}\rightarrow dp_{i+1,j}\\dp_{i,j}\times[b_{i+1}-(s_i-s_{j-1})\neq b_{i+1}]\rightarrow dp_{i+1,i+1}\end{cases}\)

考虑将两维压成一维,设 \(f_i=\sum dp_{i,j}\),那么 \(f_i=\sum\limits_{j=0}^{i-1}f_j\times[(s_{i-1}-s_{j-1})\neq 0\),于是再实时维护一个 \(t_x=\sum\limits_{s_{i-1}=x}f_i\) 就可以行了。这个可以用 std::map 实现,复杂度线对

Codeforces Round #701 (Div. 2) 题解的更多相关文章

  1. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  2. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  3. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...

  4. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

  5. Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F

    Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...

  6. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

  7. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

  8. Codeforces Round #160 (Div. 1) 题解【ABCD】

    Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...

  9. Codeforces Round #383 (Div. 2) 题解【ABCDE】

    Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...

随机推荐

  1. 【Spring】IoC容器 - 依赖来源

    前言 上一篇文章已经学习了[依赖注入]相关的知识,这里详细的介绍一下[依赖来源]. 依赖来源 我们把依赖来源分为依赖查找的来源和依赖注入的来源分别讨论. 依赖查找的来源 1. Spring BeanD ...

  2. [敏捷软工团队博客]Beta阶段测试报告

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 博客园班级博客 作业要求 Beta阶段测试报告 我们在这个课程的目标是 在团队合作中锻炼自己 这个作业在哪个具体方面帮助我们实现目标 对Bet ...

  3. [对对子队]会议记录5.18(Scrum Meeting5)

    今天已完成的工作 何瑞 ​ 工作内容:搭建第8关 ​ 相关issue:搭建关卡7.8.9 ​ 相关签入:feat:初步搭建了Lv8 吴昭邦 ​ 工作内容:搭建第8关 ​ 相关issue:搭建关卡7.8 ...

  4. 搬运2:早期写的探究printf

    目录: 1. 关于printf格式化输出 2. printf的一般形式 3. 转换说明 4. 格式化输出的意义 5. 转换说明修饰符 6. 修饰符中的标记 7. printf的返回值 ps:共3250 ...

  5. (转)linux下错误的捕获:errno和strerror的使用,以及perror和strerror的区别

    经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因.这个时候使用 ...

  6. 最近公共祖先(lca)与树上叉分

    lca的定义不在过多解释, 代码如下: inline void bfs() { queue<int>q; deep[s]=1;q.push(s); while(!q.empty()) { ...

  7. 第07课 OpenGL 光照和键盘(1)

    光照和键盘控制: 在这一课里,我们将添加光照和键盘控制,它让程序看起来更美观. 这一课我会教您如何使用三种不同的纹理滤波方式.教您如何使用键盘来移动场景中的对象,还会教您在OpenGL场景中应用简单的 ...

  8. {% csrf_token %} 原理和作用 (踩坑必看)

    本博客已暂停更新,请转自新博客 https://www.whbwiki.com/320.html 继续阅读 简介 在django中我们需要在templates的form中加入{%csrf_token% ...

  9. MongoDB与MySQL效率对比

    本文主要通过批量与非批量对比操作的方式介绍MongoDB的bulkWrite()方法的使用.顺带与关系型数据库MySQL进行对比,比较这两种不同类型数据库的效率.如果只是想学习bulkWrite()的 ...

  10. JVM启动参数详解

    JVM启动参数以及具体的解释: -Xmx1024M 最大堆内存 -Xms1024M 初始化堆内存,正常和最大堆内存相同,减少动态改变的内存损耗 -Xmn384M 年轻代内存 -XX:PermSize= ...