做了这套题,如果是让现在的我当时去考的话应该一共可以有 450 分,格雷码,括号树,树的重心都可以做,树上的数可以有 10 分,Emiya 至少可以有 76 分, 划分也可以有 64 分。看 OIerDB 上可以有 166 名的好成绩。

我的代码合集:洛谷 / 云剪贴板

[CSP-S2019] 格雷码

首先是格雷码有一个很好的生成方式,最低位 \(0110\) 的循环,次高位 \(00111100\) 的循环……

也就是说第 \(i\) 位由 \(2^{i}\) 个 \(0\),\(2^{i + 1}\) 个 \(1\),再来 \(2^i\) 个 \(0\) 来循环,并且这与总共有多少位是没有关系的!

那么我们就可以利用这个方法生成给定的第 \(k\) 个数,输出前 \(n\) 位即可。

[CSP-S2019] 括号树

首先我们考虑只有一条链怎么做。

() 看作 \(1 / -1\),做出前缀和序列。

那么对于每一个区间 \([l, r]\),为合法括号序列当且仅当 \(pre_{l - 1} = pre_r\) 并且 \(\min_{l \le i \le r} = pre_r\)。

于是可以利用单调栈,对于每一个右端点找到满足第二个条件的区间(也就是在前面第一个 \(\lt pre_r\) 后的左端点都满足第二个条件),顺便记录一下与栈顶相等的数的个数即可。

如果放在树上,我们只需要一个支持撤销的栈即可。

[CSP-S2019] 树上的数

抽象题,我只会 \(n!\) 和菊花图的做法 QwQ

[CSP-S2019] Emiya 家今天的饭

首先有一个很 naive 的 \(O(m n^3)\) DP,稍稍卡常应该是完全可以过的。

具体来说,我们发现之多只有一个不满足 \(\le \lfloor \frac k2 \rfloor\) 的食材,那么我们枚举这个食材是什么即可。

接下来,我们设 \(f_{i, j, k}\) 表示对于这个食材,考虑了前 \(i\) 种烹饪方法,选择了 \(j\) 种这个食材,一共选择了 \(k\) 种。那么枚举这一次的选择就可以转移了。

令 \(S_i\) 表示第 \(i\) 种烹饪方式有多少种选择,即 \(S_i = \sum a_{i, k}\),如果当前食材为 \(z\),那么转移为:

\[f_{i, j, k} = f_{i - 1, j, k} + f_{i - 1, j - 1, k - 1} \times a_{i, z} + f_{i - 1, j, k - 1} \times (S_i - a_{i, z})
\]

最后我们只需要 \(\sum_{j \gt \lfloor \frac k2 \rfloor} f_{n, j, k}\) 即可。

然而这极度不优秀,将 \(j \le \lfloor \frac k2 \rfloor\) 转化为 \(j \gt k - j\),那么我们只需要 \(\sum_{j \gt k - j} f_{n, j, k}\) 即可,也就是我们只关注 \(j\) 与 \((k - j)\) 的差值,那么我们按照这个作为 DP 对象即可。

\[f_{i, d} = f_{i - 1, d} + f_{i - 1, d - 1} \times a_{i, z} + f_{i - 1, d + 1} \times (S_i - a_{i, z})
\]

这就是 \(O(m n^2)\) 的了,可以过。

[CSP-S2019] 划分

首先,\(O(n^2)\) 的 DP 是简单的,我们只需要记录 \(f_i\) 表示最小代价,\(g_i\) 表示使得为最小代价最后一段的最小值。

然而我们需要 \(O(n)\) QwQ,于是考虑 \(a^2 + b^2 \le (a + b)^2\),也就是我们需要使得划分出的段最多,那么只需要利用一个单调队列即可。

具体来说,我们需要找到 \(g_j \le pre_i - pre_j\) 的最大的 \(j\),也就是 \(g_j + pre_j \le pre_i\) 的 \(j\) 即可,由于 \(pre_i\) 是单调的,这容易利用单调队列维护。

[CSP-S2019] 树的重心

见我的另一篇文章:[CSP-S2019] 树的重心 题解

CSP-S2019 题解的更多相关文章

  1. 2019 CSP J/S第2轮 视频与题解

    CSP入门组和提高组第二轮题解 转自网络

  2. 上午小测3 T1 括号序列 && luogu P5658 [CSP/S 2019 D1T2] 括号树 题解

    前 言: 一直很想写这道括号树..毕竟是在去年折磨了我4个小时的题.... 上午小测3 T1 括号序列 前言: 原来这题是个dp啊...这几天出了好几道dp,我都没看出来,我竟然折磨菜. 考试的时候先 ...

  3. [CSP模拟测试43、44]题解

    状态极差的两场.感觉现在自己的思维方式很是有问题. (但愿今天考试开始的一刻我不会看到H I J) A 考场上打了最短路+贪心,水了60. 然而正解其实比那30分贪心好想多了. 进行n次乘法后的结果一 ...

  4. 题解 nflsoj489 【六校联合训练 CSP #15】小D与随机

    题目链接 考虑枚举好点的集合.此时要考虑的问题是如何填入\(1\sim n\)这些数使得恰好我们枚举到的这些点是好点,即:求出有多少种合法的填数方案. \(1\)号点一定是好点.那么除\(1\)号点外 ...

  5. CCF CSP 201703-3 Markdown

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...

  6. CCF计算机职业资格认证考试题解

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF计算机职业资格认证考试题解 CCF计算机软件能力认证(简称CCF CSP认证)是CCF计算机职业资格认证系 ...

  7. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  8. CCF CSP 201609-3 炉石传说

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...

  9. CCF CSP 201403-3 命令行选项

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

  10. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

随机推荐

  1. 百度unit闲聊机器人

    import json import random import requests # client_id 为官网获取的AK, client_secret 为官网获取的SK client_id = & ...

  2. 在RockyLinux 9.2环境中编译CockroachDB 23.1

    目的 CockroachDB自 23.1开始,编译模式逐步放弃了Makefile,改用Bazel构建.实际上在23.1代码执行make buildshort 能够成功,但make build应该就会因 ...

  3. js 连接数据库 提示:ActiveXObject is not defined

    ActiveXObject is not defined 最近比较闲,上班瞎捣鼓一下,没想到报错了,提示ActiveXObject is not defined 大概是在js连接数据库时new对象使用 ...

  4. 力扣283(java)-移动零(简单)

    题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 请注意 ,必须在不复制数组的情况下原地对数组进行操作. 示例 1: 输入: nums = [0, ...

  5. 浅谈专有云MQ存储空间的清理机制

    简介: 浅谈专有云MQ存储空间的清理机制 在近⼀年的项⽬保障过程中,对专有云MQ产品的存储⽔位清理模式⼀直存疑,总想一探究竟但又苦于工作繁忙.精力有限,直到最近⼀次项⽬保障过程中再次出现了类似的问题, ...

  6. Flink + Iceberg + 对象存储,构建数据湖方案

    ​简介: 上海站 Flink Meetup 分享内容,如何基于Flink.对象存储.Iceberg 来构建数据湖生态. 本文整理自 Dell 科技集团高级软件研发经理孙伟在 4 月 17 日 上海站 ...

  7. 关于多个 Cookie 的分隔符这件事

    对于 Cookie 的处理上,我最近遇到一个问题,那就是如何分割 Cookie 的内容.有人说是使用逗号分割,有人说是使用分号分割,究竟用哪个才是对的?其实这个答案是需要分为两个过程,分别是请求和响应 ...

  8. 微信小程序支付实现流程

    基本流程 用户操作流程 小程序流程 整体支付流程 代码实现 创建订单 创建订单,主要是前端将订单的信息提交到后端.但是在创建订单之前还有一些准备工作要做: 获取用户数据GetUserInfo 获取用户 ...

  9. 011_元件封装FootPrint处理

    011_元件封装FootPrint处理 原理图的引脚与PCB的引脚数量一一对应,IC的PCB Foot Print属性添加好属性,后面就不用一个个添加了.

  10. js实现一个拖拽效果(本例vue中),边界限定,获取鼠标坐标,div坐标

    有事没事搞个图: demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...