集训题目的简洁题解

集训题目的简要题解

写出来给自己看的,so大家不要太苛求。
每道题的思路大概是:题意——解法——当时的思路与事后总结

6.30强基选拔

T1:7154. 【2021强基选拔】蒟蒻的回文串(palindrome)

求一个字符串通过插入字符成为回文串的最少插入次数。

显然倒过来做一个LCS即可。

可以使用滚动数组优化空间复杂度。字符串的题要会转化。

T2:7155. 【2021强基选拔】蒟蒻的幻方(magic)

定义模\(m\)意义下的幻方为:\(n\times n\) 个数,每个数在 \([0,m)\) 中,且每行每列、两条对角线的和相等。给出 \(n,m\) ,求有多少个满足条件的模 \(m\) 意义下的幻方。

打表 数学推理可以发现答案是\(\begin{cases} 2m^{n^2-2n}(n=4\text{且}2|m)\\ m^{n^2-2n}(\text{otherwise}) \end{cases}\)
为什么?考虑列出同余方程,自由元只有 \(n^2-2n+1\) 个,加上对角线的限制就是 \(n^2-2n\) 个。
但是 \(n=4\) 的时候呢,有一条同余方程的系数 \(\gcd\) 起来 \(>1\) ,所以要乘\(2\).
6.30T2

表数据异常的时候要积极考虑 1.暴力打错 2.特殊情况.
计数题,没思路尽量打表。

T3:7156. 【2021强基选拔】蒟蒻的字符串(string)

\(n\)个数,按照字典序排序后的序列区间第 \(k\) 大问题。

直接排序然后主席树啊,有什么好说的。

考场上没注意到按照字典序排序,直接主席树上了,偏偏样例又都是1位数,就让我直接主席属于干上去,错认为过了。所以要仔细看题,多想,多怀疑。

能力范围300,实际得分180。这套题还是比较水的。好好想想打这么低的原因。在于没有好好读题,看到了特殊情况,不深入思考。

7.2模拟

T1:3363. 【NOI2013模拟】Number

四种不同的读电话号码的方式:

  1. xxx-xxx-xxxxx 例如 151-958-83019

  2. xxx-xxxx-xxxx 例如 151-9588-3019

  3. xxxx-xxxx-xxx 例如 1519-5883-019

  4. xxxx-xxx-xxxx 例如 1519-588-3019

一些字符串不能在任何一种读法中出现。求合法的电话号码数量。

简单的数位dp。

没什么好说的,签到题。

T2:3364. Snake

一些蛇覆盖了一个网格。每个格子要么是一个障碍物,要么是蛇的一部分。每条蛇占据了一条折线 (拐角处只能水平和竖直连接),且至少占据两个格子。蛇与蛇之间不重叠,蛇也不会与自己重叠。每条蛇还必须满足以下两个条件中的一个:

  1. 两个端点所在的格子在网格的边界。这样的蛇至少长度为 2。
  2. 蛇构成一个环,即两个端点相邻 (垂直或水平)。注意这个条件意味着一条构成环的蛇至少需要占据 4 个格。

如果把第二类蛇的首尾连起来,发现形成一个环。此时对于非边界点,一个点的度数必定等于 2 ,边界的点度数 1 或 2 。
这启发我们使用上下界网络流来解决这个问题。黑白染色,由 \(S\) 向所有白点连一条边,上界为2,假如是边界点,那么下界为 1 ,否则为 2 。相邻的白点向黑点连一条上界为1,下界为0的边表示是否连通。对于黑点也用同样的方式和 \(T\) 连边。

这里记一下如何做上下界网络流:

​ 无源汇情况:新建源汇,考虑一个点的 \(M=in[x]-out[x]\),若 \(M<0\) ,说明流出过多, \(x\)\(T\) 连一条流量为 \(-M\) 的边,若 \(M>0\) ,说明流入过多, \(S\)\(x\) 连一条流量为 \(M\) 的边。 \(M=0\) 不用管。

​ 在建图完毕之后跑 \(S\)\(T\) 的最大流,若 \(S\) 连出去的边全部满流,则存在可行流,否则不存在。

​ 有源汇可行流,我们可以加入一条 \(T\)\(S\) 的上界为 \(\inf\) ,下界为 \(0\) 的边转化为无源汇上下界可行流问题。

​ 若有解,则 \(S\)\(T\) 的可行流流量等于 \(T\)\(S\) 的附加边的流量。

​ 有源汇最大流,注意清零gap,d数组。以及在残量网络上面再跑一次最大流。

某sls:看到限制不是人做的东西的时候就想到网络流。

T3:3365. 【NOI2013模拟】Postman

提交答案题。给出一个无向图,找到一条走遍每一条边的方法,使总花费最小。

	形成欧拉回路的充要条件即每个点为偶数度数,于是只需把奇数度数的点两两匹配,即把两个奇数点之间的最短路径再多走一遍,这样途中遇到的点不改变奇偶,只有两端改变奇偶。
	详见《《欧拉回路性质与应用探究》仇荣琦》
	这样就是要解决一个完全图的带权最大匹配,可以用带花树解决
	http://fanhq666.blog.163.com/blog/static/8194342620120304463580/
	当然,上面那个地址只是不带权板的。。。
	可用模拟退火来实现匹配,每次尝试交换两个点所匹配的点,这样就能拿82+了

不像是能做的题。

T4:3360. 【NOI2013模拟】苹果树

树上数路径颜色,但是这个数颜色的人色盲,会把一种颜色,看成另一种。

树上莫队照样做,方法是通过欧拉序拉到序列上,再单独考虑lca。

板子题,不解释。

提答题要敢玩,暴力分要拿。

7.3模拟

T1:3362. 【NOI2013模拟】数数

如果一个数的每一位数字能分成两个可重集,使两个集合数字和相等,称这个数是优美的。求\([L,R]\)区间有多少优美的。

直接数位dp。。。会算重,考虑 \(L,R\le10^9\) 于是考虑分段打表。

考场沉迷调题没把表打完。

T2:3373. Line

有个hentai校长要看学生列队。 \(N\)\(M\) 列的队伍,一行不能有连续 \(P\) 个男的,一列全是男的不好看,这种列的个数不能超过 \(Q\) 个。

流汗黄豆。。注意到 \(M\le10^8\) ,应该是矩乘,但是我不会。咕咕咕。

T3:3374. 【NOI2013模拟】Book

\(n\) 本书,第一本书的价格必须恰为 \(X\) ,而之后买的每一本书,若是比上一本更昂贵,则价格多 \(A\) 元;若是比上一本更便宜,则价格少 \(B\) 元。给出总书价,求一个合法的书的价格序列。

考虑在第 \(i\) 个位置 \(+A\) ,对答案的贡献是 \((n-i) \cdot A\) ,另一种情况同理,所以问题变成了一个经典问题:从 \(1\)\(N − 1\) 中选择一些数,使得和为 \(P\)。贪心从大到小选就好了。虽然并不会证明。

签到题。

T4:3361. 【NOI2013模拟】Manufactoria

LH玩了半个小时的机械工厂。两种东西,一种传送带,一种红蓝选择器,大意就是匹配该位的颜色并且给到对应位置。

三个图,求最少保存多少个能够识别出最初三个能识别出的机器人。

可以缩图,无关的点变为一个点,红蓝选择器看做自动机上的一个节点,问题变成了判断两个自动机是否等价。

\(f(i,j,k)\) 表示匹配到三个自动机的 \(i,j,k\) 节点,是否等价。bfs 转移即可。

能力范围200,实际得分165,注意不要死磕一道自己都不确定正确性的题!有好的替代方案要敢于尝试(分段打表)。

7.05模拟

T1:3242. Spacing

\(W\) 的稿纸,\(N\) 个单词,单词之间的空格可以有多个,要求一个单词不能被分割成两行,一个单词不能中间有空格,每一行的开头结尾必须有字母(除了结尾行最后可以没有字母),求最长连续空格长度的最小值。

考虑二分这个答案,转化成判定性问题。设 \(f_i\) 表示前 \(i\) 个单词能否满足排版需求,容易发现 \(i\) 转移到的位置是一个区间。二分找出这个区间然后线段树修改一下就是两只 \(\log\) 的了。但是还能优化。考虑从前转移过来而不是更新后面的值。于是前面也是一个区间,这个前缀和一下就能少一只 \(\log\)

签到题。

T2:3293. 【SHTSC2013】阶乘字符串

给定一个由前 \(n\) 个小写字母组成的串 \(S\) 。串 \(S\) 是阶乘字符串当且仅当前 \(n\) 个小写字母的全排列都作为 \(S\) 的子序列出现。现在判断 \(S\) 是不是阶乘字符串。\(n\le26\)

某聚聚提出大家都不会证明的猜想:\(n>21\) 时无解。好嘛,就这么做。设 \(f_S\) 表示字符集为 \(S\) 的字符串的全排列都出现过的结尾处的位置。预处理一个 \(nxt_{i,j}\) 表示 \(i\) 位置后面第一个 \(j\) 字符,转移时枚举一个字符 \(k\)\(S\) 中拿去,取每个字符作为结尾时的位置的最大值:

\[\large f_S=\begin{cases}\inf \ \ \ \ \ \text{when}\ f_{S/k}=\inf \\ nxt_{f_{S/k},k} \ \ \ \ \ \text{otherwise}\end{cases} \]

\(f_{U}\le|S|\) ,那么就是阶乘字符串。

我第一次看到这个转移式子简直惊为天人,太牛逼了谁想出来的。然后大家都说转移显然。。

T3:6108. 十二省联考2019 骗分过样例

没有题面谢谢。

我向来是不惮以最坏的恶意揣测出题人的,,,然而,

比赛的时候玩了23pts,\(\mu\) 筛错了丢了4pts。

*能力范围168,实际得分163,一定要把该拿到的分拿到。

7.6模拟

T1:3392. 【NOIP2013模拟】四叶草魔杖

7.19模拟

T1:7197. 「JOI 2020 Final」只不过是长的领带

给出 \(n\) 和两个序列 \(a_{1...n}, b_{1...n+1}\) , 对于第 \(i\) 次询问,从 \(b\) 中删除 \(b_i\) ,并将其他的 \(a,b\) 一一对应,此种对应方案的答案为 \(a_{p_k}-b_{p_k}\) 的最大值,对于每次询问,求最小的答案。

显然分别排序,按顺序对应,然后前缀后缀处理一下就好了。

没什么好说的,签到题。

T2:3661. [SHOI2014]概率充电器

一棵 \(n\) 个点的树,每个点有 \(p_i\) 的概率被充电,若一条边的权值为 \(q_i\) ,那么若这条边的一个端点被充电,另一端就有 \(q_i\) 的概率也能充电。求充电点数的期望。

树形dp。其实答案就是每个点被充电的概率和。一个点可能被充电有三种情况:自己、子树、子树外。经典树形dp。

考试因为没有加双向边,调了很久。另外使用 vector 的时候貌似出现了 undefined behavior。先挖个坑。

T3:

\(n\) 个点排成一个圈,每个点有一个权值 \(a_i\),选出其中的一些使得权值和最大,且没有连续四个同时选取。\(q\) 次修改,同时询问。

其实可以线段树上维护 \(f_{i,j}\) 表示前缀选了 \(i\) 个,后缀选了 \(j\) 个的最大值。 \(\Theta(4^4)\) 合并即可。这样常数比较大,可以考虑动态dp少一个 \(n\)

想到了没敢打系列,主要去调T2了。

能力范围300,实际得分170。强烈谴责OJ卡栈空间的行为。以及T2调了太久,要尽量多写题,提高码力。

posted @ 2021-07-18 21:20  Martin_MHT  阅读(58)  评论(0)    收藏  举报