CF edu 173 刷题笔记

\(\texttt{A}\)

简单数学题。

图形画出来是一个满二叉树,所以数层数就好了,能除以多少个 \(4\) 就有多少层,然后答案就是 \(2\) 的这个次幂。

\(\texttt{B}\)

考察整除的性质。

由于只需考虑 \(1\sim 9\) 中的奇数,所以一个一个来看。

\(1\) 肯定能被整除。

\(3\) 整除的条件是所有数位上的数相加是 \(3\) 的倍数,给定的数的数位和为 \(d\cdot n!\),显然在 \(n\ge 3\) 时一定包含因子 \(3\),即此时一定能被 \(3\) 整除。除此之外能整除的条件就是 \(d\)\(3\) 的倍数。

\(5\) 整除的数需要末尾为 \(0\)\(5\),所以只有当 \(d = 5\) 时才行。

\(7\) 整除的数需要将原数三位截断后奇偶段做差后也为 \(7\) 的倍数。当 \(n\ge 3\) 时这个差都是 \(0\),一定整除;否则就只有 \(d = 7\) 时行。

\(9\) 整除的条件和 \(3\) 相似,所有数位上的数相加是 \(9\) 的倍数,显然在 \(n\ge 6\) 时一定包含因子 \(9\),即此时一定能被 \(9\) 整除。除此之外能整除的条件就是 \(d\)\(9\)\(n\ge 3\)\(d\)\(3\) 的倍数。

if 语句写一下就行了。

\(\texttt{C}\)

(在大佬 Hagasei 的悉心指导下会做了)

\(\texttt{tip:}\)

他曾说:“对于序列上的数区间问题,无非就固定一个端点分治,放在 \(\texttt{C}\) 题多半都是固定端点。”

同时还要注意题目条件的特殊性。

看到序列中除了一个位置 \(a_i\in[-10^9, 10^9]\),其他都是 \(1\)\(-1\),那么不妨先考虑全为 \(1\)\(-1\) 的情况。

题目要求所有的区间和的值域,在这样的序列上,假设我们已经找到了一个区间 \([l, r]\),那么将左端点或右端点移动一格,取值都只会变化 \(+1\)\(-1\),所以这个值域一定是一个连续的整数段,也就是说中间是不可能出现断层的。既然如此,我们就找出上下界,说白了对原序列各求一遍最大子段和和最小子段和即可。

接着考虑有一个特殊值的情况。

这时候不妨分类讨论子段和的包含对象。分为两类:包含此特殊值的和不包含她的,最后答案取并集即可。不包含的上面已经考虑过了,所以现在只用考虑包含她的,也可以分为两部分,分别是在她左边和在她右边。和上面的分析相同,我们也要找包含她的最大/最小子段和,又有:

最大子段和 \(=\) 左边最大后缀和 \(+\) 右边最大前缀和;

最小子段和 \(=\) 左边最小后缀和 \(+\) 右边最小前缀和。

这样一来这道题就解决了。

\(\texttt{D}\)

一道神奇的题目。

看到题的一瞬间就想到令 \(A = \lambda G,b = \mu G,A < B\),那么即求最大的 \(\mu - \lambda\)\(\lambda \perp \mu\)

暴力地思考,找到 \(\lambda,\mu\) 的取值范围,然后猜想取最大值时 \(\lambda\) 距离左端点不会太远,暴力枚举 \(100\) 次,结果就这样过了……

(实际上复杂度是对的,直接暴力做也能过)

证明还是看题解吧

posted @ 2025-02-17 15:09  Brilliant11001  阅读(19)  评论(0)    收藏  举报