OI·始于阑珊(壹) 赛季日志

※ 序幕:旧世?

日常 / 闲话 >> Nov 3, 2023

前传

算是我 OI 的一个新的开始,当然,也有可能是结束了。就如一句话:“Now or never.”

本篇将会记录我在当前赛季的大部分做题情况,训练情况。

※ 第一幕:步履

日常 / 模拟赛 >> Nov 3, 2023

CSP 赛后第一次正式训练,算是康复训练吧。

全是大水题没时间懒得写比赛总结。

日常 / 练习 >> Nov 5, 2023

题目 1:[洛谷 P1783] 海滩防御

题目大意:

给定平面直角坐标系第一象限上 \(m\) 个点,以每个点为圆心半径 \(r\) 内的点为不可通过点。问 \(r\) 至少为多少,使得任意一个点从 \(y=\infty\),在 \(x\) 全程在 \([0,n]\) 且不经过不可通过点就无法到达 \(y=0\)

数据范围:\(m \le 800\)

思路:

标签:最短路、并查集

思维难度:普及

代码难度:普及+/提高-

我们发现,最后若满足条件,则场面上必然会有若干点连成一块连通块(也就是我们定义若两点的圆相切或相交,则这两点联通,然后线上的点两两可互相到达),这个联通块中至少有一个点可以屏蔽到 \(x=0\),还有一个点可以屏蔽到 \(x=n\)。因此,我们可以枚举这两个屏蔽到边界的点,算出它们的代价,然后再算出将这两个点容纳到一个连通块的最小代价,取这些代价的最大值就是当前情况的答案。

至于如何算出将两点加到一个连通块,我们可以使用最短路。具体的,我们可以定义任意两点之间边权为 \(\operatorname{dist}(x,y) \div 2\),那么要将两个点加到一个连通块的最小代价就是该两点间所有路径上边权最大值的最小值。可以使用 Floyd。

日常 / 新魔法 >> Nov 3, 2023

主线任务:完成「博弈论(SG 函数)学习笔记」(1/1),任务已完成 on Nov 26, 2023!

博弈论(SG 函数)学习笔记

日常 / 练习 >> Nov 21, 2023

题目 1:[CF1051F] The Shortest Statement

题目大意:

给定一个无向连通图,询问若干次,每次询问两点间最短路径长度。

数据范围:\(n,m,q \le 10^5, m - n \le 20\)

思路:

标签:树、LCA

思维难度:普及

代码难度:普及+/提高-

注意到 \(m-n \le 20\),换而言之,这张图是一棵多了至多 \(21\) 条额外边的树。我们首先提取出一棵树,将剩下的每一条额外边的端点为源点跑一次最短路(在图上而非树上)。对于每一次询问,答案就有两种可能:

  • 不走任何一条额外边而得。

  • 经过额外边,此时答案就是 \(\min\{dist_{u,x}+dist_{v,y},dist_{u,y}+dist_{v,x}\}+dist_{u,v}\),其中 \(u,v\) 是某一条额外边的端点,\(x,y\) 是询问的起点和终点。

题目 2:[CF519E] A and B and Lecture Rooms

题目大意:

给定一棵树和若干询问,每次询问给出两点,问树上有多少个点到这两个点的简单路径相同。

数据范围:\(n,q \le 10^5\)

思路:

标签:树、LCA、倍增

思维难度:普及

代码难度:普及

首先,给定两点之间的距离若为奇数显然无解。之后两点的中点显然是一个解,同时这个中点能不经过两点最短路径上的边而到达的点也是解。没了。至于怎么求就是简单的分类讨论。

日常 / 练习 >> Nov 24, 2023

题目 1:[CF1707C] DFS Trees

题目大意:

给定一棵 \(n\)\(m\) 边的无向图,第 \(i\) 个输入的边权值为 \(i\)。使用题目中给定的那个代码生成一棵树,问以哪些节点为根节点时代码生成的是最小生成树。

数据范围:\(n \le 10^5,m \le 2 \times 10^5\)

思路:

标签:树、LCA、倍增

思维难度:普及+/提高-

代码难度:普及+/提高-

首先,因为边权互异,所以 MST(最小生成树)唯一,可以直接求出来。考虑到一条非树边(即不在 MST 中的边)在当前情况下不会被遍历,当且仅当若遍历这条边会重复遍历某些点(即对于 \(edge(u,v)\),当前在 \(u\)\(v\) 已经遍历过),很显然,这样的边是返祖边。于是题目就变成了以哪些节点为根节点时,所有非树边为返祖边。考虑到对于每一个节点单独求出答案不好求,不妨来求出每一条非树边对答案的贡献:

  • 若以 \(1\) 为根节点,当前非树边 \(edge(u,v)\) 为横叉边,则对于 \(u\)\(v\) 的子树内的节点为根节点时,当前边为返祖边。

  • 若以 \(1\) 为根节点,当前非树边 \(edge(u,v)\) 为返祖边,若 \(u\) 的深度较浅,则对于 \(v\) 子树内和 \(u\)「向上」的子树(也就是 \(u\) 和不属于 \(u\) 的子树的点)内的点为根节点时,当前边为返祖边。

用树上差分计算每一个节点为根节点时,有多少非树边为返祖边即可。

题目 3:[SCOI2015] 国旗计划

题目大意:

给定一个有 \(m\) 点的环,有 \(n\) 个区间顺时针覆盖 \([l,r]\)。询问 \(n\) 次,第 \(i\) 次问第 \(i\) 个区间必须要选的情况下,还至少要选多少个区间满足整个环被覆盖。

数据范围:\(n \le 2 \times 10^5,m \le 10^9\)

思路:

标签:倍增、贪心

思维难度:普及

代码难度:普及

我们定义一个区间的下一个区间为这个区间可以到达,且其右端点最远的区间。我们可以用倍增求出一个区间的下 \(2^k\) 个区间,然后在第 \(i\) 次查询时,我们可以利用倍增查询到覆盖一圈的最小代价。

日常 / 新魔法 >> Nov 28, 2023

主线任务:完成「模拟退火学习笔记」(1/1),任务已完成 on Dec 1, 2023!

模拟退火学习笔记

日常 / 新魔法 >> Dec 3, 2023

主线任务:完成「2-SAT 学习笔记」(0/1)

日常 / 练习 >> Dec 5, 2023

一些关于最短路的练习,有空单独写笔记。

题目 1:[HNOI2009] 最小圈

题目大意:

给定一个 \(n\) 个点 \(m\) 条边的有向联通图,求出图中所有环中平均值最小的环的平均值。定义环的平均值为环中所有边之和除以点数的值。

数据范围:\(n \le 3 \times 10^3, m \le 10^4, |w_{edge(u,v)}| \le 10^7\)

思路:

标签:分数规划、二分、图论、负环。

思维难度:普及+/提高-

代码难度:普及

分数规划的板子。我们采用二分,那么一个大小为 \(k\) 的环的平均值若小于 \(mid\),则有:

\[\begin{aligned} &\therefore \frac{\sum\limits_{i \in circle}w_i}{k} < mid \\ &\therefore \sum\limits_{i \in circle}w_i < k \times mid \\ &\therefore \sum\limits_{i \in circle}(w_i - mid) < 0 \end{aligned} \]

其中 \(w_i\) 是环中的边的边权,那么我们将每一条边的权值减去 \(mid\) 后查找负环即可。

题目 2:[USACO07DEC] Sightseeing Cows G

题目大意:

给定一张 \(n\) 个点 \(m\) 条边的可能不连通有向图,图中点有点权,边有边权,请你求出平均值最大的环平均值。定义环的平均值为一个环中的点权之和除以边权之和。

数据范围:\(n \le 10^3, m \le 5 \times 10^3\)

思路:

标签:分数规划、图论、二分

思维难度:普及+/提高-

代码难度:普及

与上一题类似,只不过化简式子之后会出现一堆东西大于 \(0\) 的情况,这时候我们可以将两边同乘 \(-1\)

日常 / 练习 >> Dec 8, 2023

题目 1:[洛谷 P3403] 跳楼机

题目大意:

给定一个有 \(h\) 层楼的房子,你初始在第一层楼,每次可以向上移动 \(x\)\(y\)\(z\) 层楼,也可以传送到第一层楼。问你可以到达 \(h\) 层楼中的哪些楼层。

数据范围:\(1 \le h \le 2^{63} - 1, 1 \le x,y,z \le 10^5\)

思路:

标签:图论,DP,同余最短路

思维难度:普及

代码难度:入门/普及-

首先我们设 \(f_i\) 表示在不使用向上移动 \(x\) 层的情况下,能到达最小层数(设其为 \(j\))且这个层数满足 \(j \equiv x \pmod{i}\)。显然有 \(f_{i+y} = \min\{f_i + y, f_{i+y}\}\)\(f_{i+z}\) 同理。我们可以用最短路连边快速求出答案,最后答案就是 \(\sum\limits_{i=0}^x \frac{(h-f_i)}{x}+1\)

题目 2:[SCOI2011] 糖果

题目大意:

给定数列 \(a_1,a_2,\ldots,a_n\),求关于 \(x_1,x_2,\ldots,x_n\) 的方程有多少 \(y \in [l,r]\) 满足 \((\sum\limits_{i=1}^n a_i \times x_i) = y\) 有整数解。

数据范围:\(n \le 12, a_i \le 5 \times 10^5, l,r \le 10^{12}\)

思路:

标签:图论,DP,同余最短路

思维难度:普及+/提高-

代码难度:普及

和上一题类似。很显然,若 \(y=j\) 有解,则 \(y=j+a_i\) 也有解。我们可以设 \(f_i\) 表示最小的且满足 \(y \equiv i \pmod{a_t}\)\(a_t\) 所对应的 \(x_t=0\),其中 \(a_t\) 是序列 \(a\) 中的某一个值,那么我们就可以把 \(a_t\) 当作上一题中的上移 \(x\) 层楼一样,之后就和上一题差不多了。

日常 / 新魔法 >> Dec 24, 2023

学了网络流,不会写学习笔记,但是后续会写做题笔记。

主线任务:完成「网络流 24 题做题笔记」(0/1)

Working

日常 / 新魔法 >> Dec 26, 2023

复习了匈牙利算法,找时间写博客。

主线任务:完成「匈牙利及 Kuhn-Munkres 学习笔记」(0/1)

日常 / 练习 >> Jan 9, 2024

2024 了啊。。

学了 Kruskal 重构树,东西少,笔记下次一定。

题目 1:[NOI2018] 归程

题目大意:

给定一无向连通图,每条边有两个数值为个长度和海拔,多次询问,每次询问如下:

初始你在 \(s\),当前水位线为 \(w\)。你可以传送到一个点 \(u\),保证 \(u\)\(s\) 间至少有一条不经过任何被水淹的路的道路(水淹即海拔小于等于水位线)。然后你要继续从 \(u\) 走到 \(1\),问在所有选择中,从 \(u\)\(1\) 的路径最短。

思路:

标签:图论,Kruskal 重构树

思维难度:普及+/提高-

代码难度:提高

首先以海拔作为关键字,从大到小 Kruskal 重构树,这样若某一边对应的点不会被水淹,则其子树内也不会被淹。从 \(s\) 开始向上被增找到海拔最小且不会被淹的点,这个点的子树内的点就是可以选择的 \(u\),然后没了。

日常 / 练习 >> Mar 1, 2024

复活了!

题目 1:[USACO08JAN] Cell Phone Network G

题目大意:

一棵树,选中一个点可以将它和与它通过一条边直接相连的点点亮,求将所有点都点亮时最小选中点代价和。

\(n \le 10^4\)

思路:

标签:树形 dp

思维难度:普及-

代码难度:普及-

定义 \(f_{i,0/1/2}\) 表示将 \(i\) 及其子树都点亮,且 \(i\) 是被它自己点亮/儿子点亮/父亲点亮的最小代价,显然的:

\[\begin{cases} f_{x,0} = \sum \limits_{i \in son} \min \{ f_{i,0}, f_{i,1}, f_{i,2}\} \\ f_{x,1} = \sum \limits_{i \in son} \min \{ f_{i,0}, f_{i,1}\} \\ f_{x,2} = \sum \limits_{i \in son} \min \{ f_{i,0}, f_{i,1}\} \\ \end{cases} \]

其中,对于 \(f_{x,1}\),若它所有儿子的最优情况都是被其儿子的儿子点亮,需要加上最小的差值。

题目 2:[洛谷 P1270] “访问”美术馆

题目大意:

一棵二叉树,叶子结点有若干个原神玩,玩一次将消耗 \(5\) 分钟,并且一个原神只能玩一次;同时边有长度,你在到达叶子结点的路上也要消耗时间;问你在规定时间内从 \(1\) 结点出发并最后停留在 \(1\) 结点的情况下,最多能玩多少次原神。

数据范围看原题吧,有点缺德。

思路:

标签:树形 dp

思维难度:普及-

代码难度:普及/提高-

\(f_{x,s}\) 表示在 \(x\) 点子树内玩 \(s\) 次原神并回到 \(x\) 结点的最小时间花费,很显然,因为是二叉树,转移就是枚举左右子树内玩原神的次数 \(s1,s2\),然后转移。

日常 / 练习 >> Mar 3, 2024

题目 1:[USACO12FEB] Nearby Cows G

题目大意:

一棵树,有点权,对于每个结点,问距离它 \(k\) 以内的结点权值和。

数据范围:\(n \le 10^5, k \le 20\)

思路:

标签:树形 dp

思维难度:普及/提高-

代码难度:普及/提高-

换根,两次 dfs 解决。首先你会发现,一个点在距离 \(k\) 以内的结点分为往下 \(k\) 步和往上 \(k\) 步,往下的很好求,设 \(f_{x,k}\) 表示 \(x\) 往下走 \(k\) 步的权值和,则 \(f_{x,k} = \sum \limits_{i \in son_x} f_{i, k - 1}\),第一次 dfs 解决。

对于往上的,我们采用扩散型转移。令 \(g_{x,k}\) 表示一个点走 \(k\) 步的权值和(上下都有),则 \(g_{i, k} \gets g_{i, k} + g_{x, k - 1} - f_{x, k - 2}(i \in son_x)\)

题目 2:[CF708C] Centroids

题目大意:

一棵树,你可以,一次操作定义为将一条边删掉再加上一条边,并且操作后树仍然是树。问哪些点可以通过一次操作变为重心。

数据范围:\(n \le 4 \times 10^5\)

思路:

标签:树形 dp,换根 dp

思维难度:普及+/提高

代码难度:普及

首先我们选中一个重心作为根,接下来对于每一个结点,必然是其“向上”的那棵子树(及全树减去该树的子树)不满足要求。我们可以对于每一棵这样“向上”的子树中求出一个最大的、且大小小于等于 \(\frac{n}{2}\) 的子树,这样我们将向上的子树中的这棵子树移植后,若合法则有解,不难证明这么做最优。

于是我们要求出每一棵向上的子树中,最大的且小于等于 \(\frac{n}{2}\) 的子树,考虑换根 dp。令 \(f_x\) 表示 \(x\) 子树中最大的且小于等于 \(\frac{n}{2}\) 的子树,\(g_x\) 表示 \(x\) 向上的子树中最大的且小于等于 \(\frac{n}{2}\) 的子树。首先对于 \(f_x\) 很好求,接下来是对于 \(g_x\) 数组,有如下情况:

  • \(n - siz_x\) 满足要求,\(g_x = \max\{g_x, n - siz_x\}\)

  • 同时 \(g_x\) 可以在 \(x\) 向上的子树中的最大满足要求子树转移,即 \(g_x = \max\{g_x, f_{dad_x}\}\)

但是对于第二种情况,\(f_{dad_x}\) 可能最大子树刚好是 \(x\) 的子树,因此对于这种情况,我们取次大值。

※ 第二幕:阑珊

日常 / 闲话 >> Jun 25, 2024

生活真是充满意外,不是吗?

毕竟这里只是 OI 日志,所以言简意赅一些。三月到生地会考(Jun 20, 2024)之前每周都在打模拟赛,周末也偶尔会学些新东西,然而往往在充斥着烟雨的天气里,Pretharp 摔倒了。

近来天似倾覆的洋,净君未扫,若曾看过那一片片树叶在风雨中摇曳,并细细观看,你会发现:本该在池塘之类的涟漪,却在叶片间缀现,树叶在那一刻似乎是另一个世界的影子。

一年中考之期,也是初中 OI 生涯的……背水一战,暑假,抉择之日。步履阑珊向灯火阑珊,未来的某一天,我能否骄傲的说出,我趔趄的步履,与灯火闪烁交融呢?

生活真是充满意外,不是吗?

日常 / 练习 >> Jun 6, 2024

题目 2:无名

题目大意:

一个只有加减的算式,你可以通过添加括号改变运算顺序。求最大的结果可能为?

数据范围:\(n \le 1 \times 10^5\)

思路:

标签:贪心

思维难度:普及+/提高

代码难度:普及

一个括号只会出现在减号之后,不然没有意义;其次便是若出现一个减号,我们必然可以通过增添括号使得该数及以后的符号全部改为负号。

接下来考虑增加一个括号后的操作,这个括号内的符号将反转,即原来的正号将对答案造成负收益,负号造成正收益。根据上文提到的性质,我们会尽可能多的将符号改为负号以最大化收益,此时无法更改为负号的正号可以视为这次添加括号的代价。

至于怎么添加括号,首先一个括号若要添加(该括号不是在另一个括号里面的),其右括号一定在整个数列的末尾。左括号添加在哪或者根本不添加括号,可以倒序 dp 解决。

暑期 / 模拟赛 >> Jul 8, 2024

难度一般,典型意义一般,所以我懒。

暑假 / 模拟赛 >> Jul 10, 2024

预期分数为 \(100 + 20 + 100 + 0 = 220\),实际分数为 \(90 + 10 + 100 + 0 = 210\),变化量为 \(-10\)

题目概述 题目 1:

题目大意:

给定长度为 \(n\)\(01\) 串,现在你可以将其余的 \(0\) 部分改为 \(1\),但是任意两个 \(1\) 不能相邻。在添加 \(1\) 的次数最多的情况下有多少种方案。

数据范围:\(1 \le n \le 3 \times 10 ^ 5\)

思路:

标签:组合数学

思维难度:普及

代码难度:普及-

对于任意两个 \(1\) 间的只由 \(0\) 构成的字符串为子问题,不难发现若该串长度为奇数则方案数固定为 \(1\),若长度为偶数则方案数为 \(\frac{l}{2}\)。值得一提的是若该 \(0\) 构成的串在整个串的两端需要特殊讨论。

赛时思路:

同上。

题目概述 题目 2:

题目大意:

给定长度为 \(n\) 的数列(下标从 \(0\) 开始),进行 \(m\) 次操作,每次给定 \(l,r,p,q\),含义为将下标为 \(l \oplus p, l + 1\oplus p, \ldots, r \oplus p\) 的数异或 \(q\),问最终答案。

数据范围:\(1 \le n,m \le 2 ^ {18}\)

思路:

暂无。

赛时:

暴力走人。

题目概述 题目 3:

给定 \(a,b\),进行 \(k\) 次操作,若 \(a \ge b\) 则将 \(a \to a - b, b \to 2b\),反之则将 \(b \to b - a, a \to 2a\),问最终 \(b\) 值。

数据范围:\(1 \le a,b,k \le 10^9\)\

思路:

标签:数学

思维难度:普及+/提高-

代码难度:入门

考虑 \(a,b\) 之和固定,可以设 \(x=a+b\),则 \(b\) 每次操作将变为 \(2b\)\(2b-x\),可以归类为 \(2b \% x\),故最终答案为 \(2^kb \% (a+b)\)

赛时思路:

同上

暑假 / 模拟赛 >> Jul 11, 2024

预期分数为 \(100 + 0 + 100 + 100 = 300\),实际分数为 \(100 + 0 + 100 + 10 = 210\),变化量为 \(-90\)

题目概述 题目 1:

题目大意:

给定 \(2n\) 双袜子,这些袜子两两成对。现每次取出两只袜子,若为一对则得一分,求期望得分。

数据范围:\(1 \le n \le 10^5\)

思路:

标签:计数、概率与期望

思维难度:普及+/提高-

代码难度:入门

首先显然有 \(\frac{A_{2n}^{2n}}{2^n}\) 种取出全部袜子的方案,那么至少取出一对袜子的情况为 \(\frac{nA_{2n-2}^{2n-2}}{2^{n-1}}\),也就是一对袜子的期望得分为取出这一对袜子的方案数除以总方案数,考虑到有 \(n\) 对袜子,故最终答案为 \(\frac{n\frac{nA_{2n-2}^{2n-2}}{2^{n-1}}}{\frac{A_{2n}^{2n}}{2^n}}=\frac{n}{2n-1}\)

赛时思路:

同上。

题目概述 题目 2:

题目大意:

一个 \(n\)\(m\) 边的无向图构成的交通网,边有长度。有 \(k\) 条公交线路,每条线路有若干站点,只要你存在于某个站点即可到达该线路的任意站点,有代价。除此之外你可以乘坐出租车,代价为 \(\left\lceil\frac{l}{r}\right\rceil\)。问从 \(st\)\(ed\) 的最小代价。

数据范围:\(1 \le n, m, k \le 2 \times 10 ^ 5\)

思路:

标签:建图、最短路、图论

思维难度:普及+/提高-

代码难度:普及

对于公交线路,显然可以建立虚点处理。关键在于出租车的向上取整难以处理,但若我们将乘坐公交代价变为原来的 \(r\) 倍,最后答案统一除以 \(r\) 即可。值得一提的是每次乘坐公交前必然会结束一次出租车的乘坐,为了防止误差,若当前代价不为 \(r\) 的倍数需要向上转化为 \(r\) 的倍数,该操作可以在最短路中完成。

赛时思路:

忘了怎么敲 Dijkstra。

题目概述 题目 3:

题目大意:

给定 \(n\) 个点,坐标为 \((x_i,y_i)\),定义一个合法的集合 \(S\) 内所包含的点满足按照 \(y\) 降序排列后有:对于任意 \(j\)\(3 \le j \le |S|\)),满足 \(x_{j-1}<x_j<x_{j-2}\)\(x_{j-2}<x_j<x_{j-1}\),求合法的非空集合 \(S\) 的数量。

数据范围:\(1 \le n \le 6000, 1 \le x_i,y_i \le 10^9\)\(x_i,y_i\) 互不相同

思路:

标签:动态规划、dp

思维难度:普及

代码难度:普及

\(f_i\) 表示将该点作为一个集合最右边点的集合数,\(g_i\) 作为最左边点的集合数量,对于 \(i,j\),若 \(y_i<y_j\) 则可 \(f_j \to f_j + g_i\),反之 \(g_i \to g_i + f_j\)

赛时思路:

\(f_{i,j}\) 表示区间 \([i,j]\) 内(横坐标)的合法集合数,转移类似于正解思路,最后优化为了正解思路。

题目概述 题目 4:

题目大意:

给定一棵 \(n\) 个点的树,每个点有两个值 \(a_i\)\(b_i\),一条直链的定义为深度两两不同的链,先将整棵树划分为若干直链(每个点在且仅在一条直链中),使得每个直链中所有数的 \(a\) 构成的集合与 \(b\) 构成的集合相同。问是否有合法方案。

数据范围:\(1 \le n \le 10^5, 1 \le a_i,b_i \le 10^9\)

思路:

标签:贪心,树

思维难度:普及

代码难度:普及+/提高-

对于一个点(枚举顺序由深度大的至深度小的),若其 \(a_i \not= b_i\) 则它需要与一个 \(b\) 与其 \(a\) 相同的点在一个直链内,我们可以暴力向上寻找,遇到第一个合法解就停止,显然这样做最优。

赛时思路:

同上,代码挂了。

暑假 / 模拟赛 >> Jul 12, 2024

期望得分 \(25 + 20 + 100 + 0 = 145\),实际得分 \(25 + 20 + 100 + 0 = 145\),变化量为 \(0\)

题目概述 题目 1:

题目大意:

给定一棵 \(n\) 个点的树及长度为 \(n\) 的数列 \(a\)\(q\) 次询问,每次询问在点 \(a_l,a_{l+1},\ldots,a_r\) 中有多少点为 \(x\) 点的祖先/后代。

数据范围:\(1 \le n,q \le 5 \times 10 ^ 5\)

思路:

标签:树

思维难度:普及

代码难度:提高

询问祖先可以使用树状数组和 dfs 离线做,询问后代可以通过树状数组记录 \(dfn\) 解决。

赛时思路:

询问祖先做法同正解,询问后代做法为暴力。

题目概述 题目 2:

题目大意:

交互题。\(n\) 瓶果汁中正好有两瓶果汁为坏果汁,两瓶果汁的编号差为 \(c\),你可以指定最多 \(40\) 个朋友品尝果汁(一瓶果汁可以由多人品尝),第二天这些朋友中生病的朋友为品尝到坏果汁。求两瓶坏果汁的编号。

数据范围:\(1 \le n,c \le 10^5\)

思路:

标签:二进制

思维难度:提高

代码难度:普及

假设只有一瓶坏果汁,令第一个人品尝 \([1,\frac{1}{2}n]\) 间的果汁,第二个人品尝 \([1,\frac{1}{4}n]\)\([\frac{1}{2}n+1,\frac{3}{4}n]\),第三个人品尝 \([1,\frac{1}{8}n]\)\([\frac{1}{4}n+1,\frac{3}{8}n]\)\([\frac{1}{2}n + 1, \frac{5}{8}n]\)\([\frac{3}{4}n + 1, \frac{7}{8}n]\),以此类推。

\(x\) 在二进制下从高往低第 \(i\) 位为第 \(i\) 个人是否生病,不难发现 \(x\) 就是最终该果汁的编号。重新考虑两瓶果汁,\(x\) 就是两果汁编号的按位或的和。

赛时思路:

通过特殊性质得了 \(20\) 分,全程在构造一种方法。

题目概述 题目 3:

给定字符串 \(s\),问其有多少个前缀可以通过以下操作变为 \(s\)

  • 令当前字符串为 \(l\),将 \(l_1,l_2,\ldots, l_{|l|-1}\) 部分复制一份并翻转再接到 \(l\) 后面(如 \(\texttt{abcd}\) 变为 \(\texttt{abcdcba}\));
  • 将当前字符串的一个后缀删除,进行一次次操作后不能再进行任何操作。

数据范围:\(1 \le |s| \le 10^5\)

思路:

标签:字符串哈希

思维难度:普及+/提高-

代码难度:普及

对于一个 \(i\),若将 \(1\)\(i\) 作为前缀,那么:

  • 若进行一次操作一后若其长度超过 \(s\) 则删除多余后缀,若此时 \(l\) 合法则该前缀合法;
  • 若进行一次操作一后其长度小于 \(s\),那么其是否合法取决于以 \(2i - n\) 作为前缀是否合法。

\(i\) 倒序枚举并用字符串哈希处理即可。

赛时思路:

同上。

题目概述 题目 4:

题目大意:

给定字符串 \(s\)\(q\) 次询问,每次询问给定 \(l,r\)。若在一个字符串中存在至少一个长度为 \(x\) 的子串不回文,则 \(x\) 是好的长度。对于每次询问求出 \(s\)\([l,r]\) 子串内所有好的长度之和。

数据范围:\(1 \le |s|,q \le 10^5\)

思路:

标签:

思维难度:普及

代码难度:普及

假设 \(x=4\) 是不好的长度,那么令 \(l=1,r=5\),则有 \(s_1=s_4,s_2=s_3\),又因为 \(s_2=s_5,s_3=s_4\),所以 \(s_1=s_2=s_3=s_4=s_5\)

根据这个性质推广,我们只需判断 \(x=2\)\(x=r-l+1\)

赛时思路:

无。

※ 第三幕:悼花

赛前 / 闲话 >> Sep 22, 2024

昨天初赛,成绩估算大概一般吧,反正能过。

同时,也是从初赛开始正式停课了。事实上从初赛开始前几天就在神游,思考着,思考着。后续可能会将最近的梦和经历写在一起,算是一个告别,也是一个纪念。不该死,也死得其所,两者本不应矛盾。

暑假的训练持续到了最后一周,但是笔记没有写到最后一周,惭愧。

关于第三幕,也是终章(如果还打 noip 就当我没说)的名字就这么很自然的,悼花,是悼念的花,还是花的悼念?

还有,我赛前一直停课集训,只是内部题目老师不让我发出来。咳咳,我没偷懒!

赛前 / 练习 >> Sep 22, 2024

题目 1:[洛谷 P5336] [THUSC2016] 成绩单

题目大意:

给定 \(n\) 个数 \(w_1\)\(w_n\),每次删去一段连续区间 \([l, r]\) 的代价为 \(bw_0^2+a\)\(w_0\) 为极差),同时删去后我们认为两旁区间相邻。问将所有数删去的最小代价。

数据范围:\(1 \le w_i \le 1000, 1 \le n \le 50\)

思路:

标签:动态规划

思维难度:省选

代码难度:普及

极度非主流的区间动态规划。

对于区间 \([l,r]\),若其最大值小于等于 \(w_{\max}\) 且最小值大于等于 \(w_{\min}\),那么删去该区间的代价不会超过 \(b(w_{\max}-w_{\min})^2+a\)。显然,该区间的原始状态可能不能满足所有数在 \([w_{\min},w_{\max}]\) 范围内,我们令 \(f_{l,r,w_{\min},w_{\max}}\) 表示将区间 \([l,r]\) 通过不断删除子段使得区间内所有数权值在 \([w_{\min}, w_{\max}]\) 范围内的最小代价(注意,这并不意味着区间的最小值和最大值是 \(w_{\min}\)\(w_{\max}\)),那么删除整个区间 \([l,r]\) 的最小代价就是 \(\min\{f_{l,r,w_{\min},w_{\max}}+a+b(w_{\max}-w_{\min})^2\}\),令该值为 \(ans_{l,r}\),最终答案为 \(ans_{1,n}\)

\(ans\) 好转移,我们考虑如何转移 \(f\)。难点在于我们无法动态维护最大值和最小值,但是根据定义,我们可以枚举一个界限,这样的答案不一定最优但是合法。接下来就是一个简单的区间 dp 套路,先枚举 \(l\)\(r\),再枚举 \(w_{\min}\)\(w_{\max}\),接下来枚举断点,将 \([l,r]\) 分为左右两半,使得其中一半合法(也就是所有数在 \([w_{\min},w_{\max}]\) 范围内)有两种办法:第一种是删除其中某一部分,代价为 \(f_{l,k,w_{\min},w_{\max}}\);第二种是直接将整个区间删除,代价为 \(ans_{l,k}\)。故 \(f_{l,r,w_{\min},w_{\max}}=\min\limits_{l \le k \le r}\{f_{l,k,w_{\min},w_{\max}}+ans_{k+1,r},ans_{l,r}+f_{k+1,r,w_{\min},w_{\max}},f_{l,k,w_{\min},w_{\max}}+f_{k+1,r,w_{\min},w_{\max}}\}\)

维护可以用记忆化搜索,时间复杂度 \(O(n^5)\)

题目 2:[HAOI2016] 字符合并

题目大意:

有一个长度为 \(n\)\(01\) 串,每次可以合并长度为 \(k\) 的连续子段,对于所有不同情况的子串合并后其原来的位置会用一个新的 \(0\)\(1\) 替换,且你将得到一定分数。问最后的最大分数。

数据范围:\(1 \le n \le 300, 1 \le k \le 8\)

思路:

标签:动态规划

思维难度:省选

代码难度:普及

\(k\) 最多为 \(8\),考虑状态压缩。令 \(f_{l,r,s}\) 表示将区间 \([l,r]\) 合并,最后状态为 \(s\) 时的最大得分。考虑合并,不难发现对于区间 \([l,k]\)\((k,r]\) 并不好合并,除非其中某一个区间可以通过若干次合并只剩下一个元素,那么此时若 \([l,k]\) 的状态为 \(s'\),有 \(f_{l,r,2s'+1/0}=f_{l,k,s'}+f_{k+1,r,1/0}\)。如果最后整个区间也能合并为一个元素记得特判。

※ 终幕:将熄

参见 CSP-S 2024 游记

※ 番外:忘言

参见 NOIP 2024 游记

posted @ 2023-12-05 20:21  Pretharp  阅读(89)  评论(0)    收藏  举报