Loading

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\) 个吸引力的方案数。

那么就有转移:

\[dp_{i, j} = dp_{i - 1, j + 1} \ (j \ne 0) \]

\[dp_{i, j} = dp_{i - 1, 0} \ (j = 0) \]

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\) 个字母是否可以组成回文串。

那么就有转移:

\[dp_{i, j, k, l} \ |= dp_{i + 1, j - 1, k, l} \ (S1_i = S1_j , i < j) \]

\[dp_{i, j, k, l} \ |= dp_{i, j, k + 1, l - 1} \ (S2_k = S2_l, k < l) \]

\[dp_{i, j, k, l} \ |= dp_{i + 1, j, k, l - 1} \ (S1_i = S2_l, i \le j, k \le l) \]

\[dp_{i, j, k, l} \ |= dp_{i, j - 1, k + 1, l} \ (S1_j = S2_k, i \le j, k \le 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\) 中选择一个。

posted @ 2023-04-27 16:36  chengning0909  阅读(25)  评论(0编辑  收藏  举报