首页 > 其他分享 >CSP-2019-S 题解

CSP-2019-S 题解

时间:2023-11-10 17:24:20浏览次数:38  
标签:pre le 题解 食材 2019 即可 S2019 CSP

做了这套题,如果是让现在的我当时去考的话应该一共可以有 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] 树的重心 题解

标签:pre,le,题解,食材,2019,即可,S2019,CSP
From: https://www.cnblogs.com/jeefy/p/17824580.html

相关文章

  • CF1428F Fruit Sequences 题解
    使用了一种和大多数题解不同的做法。虽然是带\(log\)的。思路首先考虑如何求一个固定左端点的答案。我们发现,每个答案会随着右端点的递增单调不降。而每个答案在增加时会形成若干个区间。例如:11101010111111我们答案增加的区间即为:11100000000111可以发现,这个区间就......
  • [BalticOI 2019 Day2] 汤姆的餐厅
    [BalticOI2019Day2]汤姆的餐厅题目背景译自BalticOI2019Day2T1.Tom'sKitchen题目描述Tom'sKitchen是一家非常受欢迎的餐厅,其受欢迎的原因之一是每份菜都由至少$K$名厨师进行准备。今天有$N$份菜需要准备,第$i$份菜的准备时间是$A_i$小时。Tom可以......
  • 【洛谷 P1980】[NOIP2013 普及组] 计数问题 题解(取余)
    [NOIP2013普及组]计数问题题目描述试计算在区间到的所有整数中,数字()共出现了多少次?例如,在到中,即在中,数字出现了次。输入格式个整数,之间用一个空格隔开。输出格式个整数,表示出现的次数。样例#1样例输入#1111样例输出#14提示对于的数据,,。思路求每个数字的......
  • Math.round(-2019.5)的结果是 -2019
    Math.round()函数返回一个数字四舍五入后最接近的整数如果参数的小数部分大于0.5,四舍五入到相邻的绝对值更大的整数如果参数的小数部分小于0.5,四舍五入到相邻的绝对值更小的整数如果参数的小数部分等于0.5,四舍五入到相邻的在正无穷(+∞)方向上的整数。例:x=Math.round(2019.49);......
  • [ABC286G] Unique Walk 题解
    洛谷题目链接At题目链接这题一看就很欧拉路径,但是怎么做呢?如果只有关键边,那么连通图首先会变成一堆连通块,这时只需要分别对每个连通块进行欧拉路径判断,但是对于不属于欧拉路径的连通块,很难对加上非关键边的情况进行扩展。如果只有非关键边,那么连通图还是变成一堆连通块,但是这......
  • 题解 P4630 [APIO2018] 铁人两项
    具体思路题目问的是三元组\((x,z,y)\)使得\(x\)可以到达\(z\),且\(z\)可以到达\(y\),求三元组\((x,z,y)\)的数量。我们转化一下问题,就是问\(x,y\)之间所有不重复路径的点的并集减\(2\)。显然,无向图中任意一个点都属于一个点双连通分量。那么问题转化为\(x,y\)之......
  • [题解] P6773 [NOI2020] 命运
    P6773[NOI2020]命运给你一棵\(n\)个节点的树,要给每条边染成\(0\)或\(1\)。有\(m\)个限制\((u,v)\)满足\(u\)是\(v\)祖先,表示\(u\)到\(v\)的路径中至少有一条边被染成了1。求方案数。\(n,m\le5\times10^5\)。首先会想到容斥,但是很没前途,所以考虑......
  • 通过一道题目带你深入了解WAF特性、PHP超级打印函数、ASCII码chr()对应表等原理[RoarC
    题目环境:<br/>依此输入以下内容并查看回显结果1+11'index.phpls<br/><br/>到这里没思路了F12查看源代码<br/>一定要仔细看啊,差点没找到,笑哭访问calc.php文件<br/>果然有点东西PHP代码审计error_reporting(0);关闭错误报告通过GET方式传参的参数numsho......
  • [ZJCTF 2019]NiZhuanSiWei 1
    1.进入页面2.从代码中可以看出要求,以get方式传递text,file,password三个参数。3.第一层验证if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf"))  传入text,而且file_get_contents($text,'r')之后内容为“welcometothezjctf”  利用php伪协......
  • P9194 [USACO23OPEN] Triples of Cows P 题解
    Description给定一棵初始有\(n\)个点的树。在第\(i\)天,这棵树的第\(i\)个点会被删除,所有与点\(i\)直接相连的点之间都会两两连上一条边。你需要在每次删点发生前,求出满足\((a,b)\)之间有边,\((b,c)\)之间有边且\(a\not=c\)的有序三元组\((a,b,c)\)对数。\(n\leq2......