SDFZ 总结
T1001:最佳方案
2A
第一次错误是因为把 \(n - \lfloor \frac{n}{2} \rfloor\) 和 \(\lfloor \frac{n}{2} \rfloor\) 看成一样的了。
第二次提交通过,这道题是用有点贪心的方法解决的。
思路
每次将 \(n\) 变成更小的数,记录次数。
T1002:回文串
1A
第一次提交通过,这道题是经过仔细思考后解决的,没有用算法,不知道是什么方法,不写。
思路
令字符串中不相等的一对字符的数量为 \(c\),记录 \(c\),每次判断是否与对应的字符相等,再根据 \(c\) 是否为 \(0\) 判断是否为回文串。
T1003:双面迷宫
3A
第 \(1 \sim 2\) 次错误是因为用的 dp,会超时。
第三次提交通过,贪心。
思路
先枚举走哪一边,贪心得到只走一边的最大值,将每个数对答案造成的影响加入到堆中,最后将最大值加上取出最大的 \(m\) 个非负整数即可。
T1004:壁纸
3A
第 \(1 \sim 2\) 次错误是因为初始化出了错。
第三次提交通过,用的 dp。
思路
\(dp_{i, j}\) 表示当前是第 \(i\) 天且现在使用的壁纸还有 \(j\) 个吸引力的方案数。
那么就有转移:
T1005:智力测试题
4A
第 \(1\) 次错误是因为方法错误。
第 \(2 \sim 3\) 次错误是因为题目出了一些问题。
第 \(4\) 次提交通过,枚举 + 模拟。
思路
枚举这 \(k\) 次移动,模拟小球的移动。
T1006:采集晶矿
3A
第 \(1 \sim 2\) 次方法错误。
第 \(2\) 次提交通过,排序。
思路
求 \(k\) 个最大值的和。
T1007:飞翔的排列
1A
第 \(1\) 次提交通过,应该算是一道简单的思维题吧。
思路
可以发现,序列最多飞翔 \(1\) 次。
如果是单调递减的,\(0\) 次,否则,\(1\) 次。
T1008:防御法阵
21A
第 \(1 \sim 19\) 次是用的 01 背包 + 贪心,方法错误。
第 \(20\) 次数组开大了。
第 \(21\) 次提交通过,01 背包 + 区间 dp。
思路
用 \(01\) 背包求出每块城墙最多可以得到多少经验值。
再用区间 dp 求出最大经验值。
T1010:找因数
1A
第 \(1\) 次提交通过,埃式筛预处理。
思路
一边做埃式筛,一边更新第二大因数。
T1011:赚金币
1A
第 \(1\) 次提交通过,枚举 + 进制。
思路
枚举 \(n\) 后面的 \(d\) 个数,暴力转 \(k\) 进制,统计 \(x\) 的数量。
T1012:分数获取
2A
第 \(1\) 次错误是因为用的 multiset。
第 \(2\) 次提交正确,标记数组(map)。
思路
将 \(a\) 数组的所有元素全部减 \(1\),做前缀和,将前缀和数组统计一下数量,最后累加。
T1013:逃跑
11A
第 \(1 \sim 10\) 次错误,bfs 细节没有处理好。
第 \(11\) 次提交正确,bfs。
思路
将每个传送门都与任意一个其他的传送门建边,bfs。
T1009:晒衣服与烘干机
2A
第 \(1\) 次错误,没开 long long。
第 \(2\) 次提交正确,二分答案。
思路
二分所需的最短烘干时间,将水量大于二分的这个值的衣服所需用烘干机的分钟数累加起来,判断与二分的这个值的大小关系即可。
T1014:字符串合并
1A
第 \(1\) 次提交正确,区间 dp。
思路
\(dp_{i, j, k, l}\) 表示 \(S1\) 的第 \(i \sim j\) 个字母与 \(S2\) 的第 \(k \sim l\) 个字母是否可以组成回文串。
那么就有转移:
T1015:分糖果
3A
第 \(1 \sim 2\) 次错误,乱搞,没搞出来。
第 \(3\) 次提交正确,二分。
思路
将每堆糖果的数量都先对 \(m\) 取模,每次找出第一个大于等于 \(m - 1 - a_i\) 的元素,取和模 \(m\) 的最大值即可。
T1016:神灯精灵
2A
第 \(1\) 次错误,dfs。
第 \(2\) 次提交正确,二进制。
思路
在样例中,不难发现第一个回答为否时,会造成 \(4\) 的影响,第二个答案为否时,会造成 \(2\) 的影响……
设长度为 \(n\),并且将字符串中的 \(Y\) 变成 \(0\),\(N\) 变成 \(1\)。
那么,答案就是 \(1 + \sum \limits _ {i = 0} ^ {n - 1} s_i \times 2 ^ {n - i}\)。
T1017:质数数量
3A
第 \(1 \sim 2\) 次错误,组合数求错了。
第 \(3\) 次提交正确,组合数学 + 费马小定理 + 快速幂 + 欧拉筛。
思路
我们可以发现,要想让乘积为质数,就是由一个质数和很多个(可能为 \(0\) 个)\(1\) 相乘得到的。
那么,我们不难发现,肯定是需要统计质数的数量与 \(1\) 的数量的,令质数数量为 \(c1\),\(1\) 的数量为 \(c2\)。
因为 \(1 \le a_i \le 10 ^ 7\),所以我们考虑使用欧拉筛。
简单
既然是由很多个 \(1\) 相乘得到的,那么每个 \(1\) 就可以选或者不选,所以就有 \(2 ^ {c2}\) 种选择 \(1\) 的方法,所以,答案就是 \(2 ^ {c2} \times c1\)。
复杂
我最开始并没有想到 \(2 ^ {c2}\),而是想到了组合数学,就是在 \(c2\) 中挑选 \(1\) 个,挑选 \(2\) 个,挑选 \(3\) 个……
由于需要取模,并且有除法,所以还需要用一下费马小定理与快速幂。
T1018:咖啡牛奶
2A
第 \(1\) 次错误,乱搞。
第 \(2\) 次提交正确,分类讨论。
思路
分类讨论。
不妨设 \(n < m\)。
-
若 \(n = m\),则答案为 \(\frac{n}{2}\)。
-
若 \(n \ne m\),就先做三分咖啡 + 一份牛奶的,再做两份咖啡 + 两份牛奶的。
T1019:旅行计划
1A
第 \(1\) 次提交正确,枚举。
思路
先不看数据范围,我们不难想到这种方法:
从 \(1\) 到 \(n\) 枚举所有点,再枚举所有传送门,取所有从 \(i\) 走到第 \(j\) 个传送门的距离取最小值 \(mmin\),再取 \(mmin\) 和直接走过去的距离的最小值累加即可。
T1020:全等序列
1A
第 \(1\) 次提交正确,没有用算法,不知道算是什么方法。
思路
因为每次操作是让一个元素 \(+1\),另一个元素 \(-1\),序列总和不会发生改变,所以最终变成的数字就是序列的和的平均数。
统计整个序列的和 \(s\),如果 \(s \bmod n \ne 0\),直接输出 \(-1\),表示不能恰好平均分给 \(n\) 个数。
否则,从 \(1\) 到 \(n\),如果当前元素不为平均数,改成平均数,将所造成的影响放在后一个数字,最后判断 \(a_n\) 是否为平均数即可。
T1021:出题
3A
第 \(1\) 次错误,初始化超时。
第 \(2\) 次错误,没开 long long。
第 \(3\) 次提交正确,容斥原理 + 组合数学。
思路
由于题目是要求选择三个题目的方案数,那么我们先不考虑类型和难度,就会发现,有 \(C _ n ^ 3\) 种方法,也就是 \(\frac{n \times (n - 1) \times (n - 2)}{6}\) 种。
然后,就需要从里面去掉不符合要求的,我们考虑去掉包含问题 \(i\) 的不合法的方案,那么就只能从类型 \(a_i\) 中选择一个,从难度 \(b_i\) 中选择一个。