- 博客(11)
- 收藏
- 关注
原创 CF1007(Div.2)BCD
当然,直接暴力是过不了的,但我们可以观察到,完全平方数很分散,所以可以得到一种o(n)的解法。从1开始遍历,如果此时加上i,我们的cnt是完全平方数,那我们就可以将该数与下一个数交换,从而就可以避免cnt成为完全平方数。在开始时这种做法显而易见可以,因为交换的是i+1,在结束时也同样可以。这个题目很好,读过题我们知道,当m(也就是l和r)<= 2n + 1 时,我们只用求1的m的异或和。而由于该题求的是所给数整除2后的结果,从而导致了当m>n时且m为偶数,那么a(m)=a(m+1),从而可以相消。
2025-03-01 16:22:31
367
原创 CF1002(div2)ABC
首先,根据题意我们不难发现,要使c中有三个不同的元素,当a或b数组中任意一个有三个不同的元素,就一定会成立。其次,如果每个集合中都含有两个完全不同的元素,那么也可以构成如 x+a<x+b<y+b 的式子,一定会成立。根据这两个条件,我们就可以解出这题。
2025-02-24 10:57:14
276
原创 树的最近公共祖先(LCA)倍增求法
最近公共祖先(LCA):即给出两个节点x和y,找到他们不断向上爬首次共有的祖先。如图所示,8和6的公共祖先为1,10和7的公共祖先为3,4和5的公共祖先为2。如果使用朴素算法来解决问题,时间复杂度将会达到o(n^2),这里我们将使用倍增法,时间复杂度为o(nlogn)。那么倍增法该怎么做呢。我们将建立以个二维数组fa[i][j],其中i代表该节点,j表示向上走2^j,fa[i][j]即表示i节点向上走2^j后到达的节点。
2025-01-06 09:18:21
691
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人