XYD11.27模拟赛

欸,最后一场模拟赛了是吧,无话可说啊

T1:

\(sum[r]^sum[r1]=sum[l-1]^sum[l1-1]\)

看到异或,想到拆位吧

考虑我们怎么快速知道上面的异或和,拆位之后我们就知道了每个二进制在中间出现了多少次?

这样是不是可以分治?我觉得容斥也可以吧。或者这个东西其实还是蛮有规律的?

现在有 \(4\) 种思路了。一个一个思考吧

每找到一对 \(4\) 个异或起来是 \(0\) 的,这个应该是纯扯

拆位很有前途。

考虑最高位为 \(1\) 的答案有多少种,

分讨,如果跨国中间区间的那么右边伸到 \(1\) 的长度就是奇数,这个也很搞笑吧,但是拆位仍然是一个很好的思路

找规律?

我们发现随着 \(i\) 的增大,我们 \(i\) 的前面都是一样的。

\(i\) 比较小的时候有特例,\(i\) 比较大的时候,前 \(3\) 位都是 \(1,3,6\)\(i\) 为奇数的时候,是 \(1,3,6,10\)\(i\) 为偶数的时候,是 \(1,3,6,7\)。这个东西能给我们什么启示呢?继续看看后面。

而且 \(1367\)\(4\) 开始稳定也很可疑

偶数的规律可以拓展到 \(1,3,6,7,11,11\)

猜测长度为 \(8\) 的稳定段以 \(8\) 为开头,以 \(4\) 为间隔,这个是对的

那么长度为 \(16\) 的稳定段呢?

也是一样的。

那么对于 \([l,r]\) 我们就可以找到它的稳定段。

\(k\) 为第一个 \(\ge r-l+1\) 的二次幂长度,那么就可以递归到它的稳定段了。这个东西可以通过拆位证明。

然后我们后面这段可不可以递归一下?

我们还发现了性质,有时候,我们的 \([l,r]\)\([l-1,r]\) 是相同的,我猜测这个东西会帮助我们递归到一个比较简单的状态

部分分启动,对于前面,分是好拿的,对于二次幂的东西,显然答案也是二次幂。

对于 \(l=0\) 的情况,我们发现重要规律!首先二次幂是对应的二次幂,然后前面的往后距离它最近的二次幂答案减去距离 \(/2\) 即可,

对于 \(l\) 不确定的情况,先找找二次幂在哪里?

对于 \(l=1\),我们发现后面的二次幂还是一样的,但是前面的不太一样啊。但是我们能处理l比较小的情况了,这启示我们把大的情况递归到小的情况,这个有什么前途吗?

够了够了

给一个神秘结论。

首先把区间异或和变成前缀异或,此时,我们打一个前缀异或和的表

0 1 3 0 4 1 7 0 8 1 11 0 12 1 15 0 16 1 19 0 20 1 23 0 24 1 27 0 28 1 31 0 32 1 35 0 36 1 39 0 40 1 43 0 44 1 47 0 48 1 51 0 52 1 55 0 56 1 59 0 60 1 63 0 64 1 67 0 68 1 71 0 72 1 75 0 76 1 79 0 80 1 83 0 84 1 87 0 88 1 91 0 92 1 95 0 96 1 99 0 100

有很多数经常出现啊,比如 \(1\)\(0\)\(0\)\(4\) 个出现一次,\(1\) 也是每 4$ 个出现一次,这个启示我们往 \(%4\) 意义下考虑。\(%4=2\) 的数是 \(i+1\)\(%4=0\) 的数是 \(i\)\(%4=1\) 的数是 \(1\)\(%4=3\) 的数是 \(0\)

现在相当于选一前一后两个数了,不会不会

T2:

肯定是树形dp啊hhh。设 \(dp[i]\) 为子树内的方案数的乘积。为了转移这个重心,我们是不是还要钦定重心什么的。也就是我们 \(i\) 所在的连通块会有一个重心。我们钦定重心是很难做的,我们能做的就是找找重心有多少个判定一个树有多少个重心?我们肯定是采用所有子树大小都不超过 \(n/2\) 的那个东西。但是我们发现我们dp方程很难把这个东西压进去。试一下。首先我们钦定一个点为根,这个东西很难搞。

\(dp[i][j][k][0/1/2]\) 为当前做到 \(i\),钦定 \(i\) 所在连通块大小为 \(j\),下面已经大小为 \(k\),已经有 \(0/1/2\) 个重心,当前的方案数。

如果我们 \(i\) 要作为重心,那么我们就从 \(dp[to][j][k][0]\)\(k<j/2\))转移一个出来。

里面再背包一下,然后就可以转移了。最外层再统计一下答案啊。

对于菊花。如果只保留根节点和一个点,那么方案有 \(n\) 种,贡献为 \(2n\),其他的方案都是 \(1\) 种,直接算即可

对于链。直接 \(n^2\) 转移即可。

还是dp,有点难写啊。我想想,一层

T3:
添加一条?那么我会 \(n^3\)

T4:

经典反悔贪心。

我们在 \(set\) 里装油即可,然后每到一个站就把前面更贵的油全部退掉。然后在途中加油。

还行,还是很有想题的感觉的

posted @ 2025-11-28 19:18  wuhupai  阅读(0)  评论(0)    收藏  举报