做题记录二

写在前面:

多做,少胡

以下是正文:

2026/02/11

随机化总结:

  1. 随机赋值
    • 最强跳蚤
      题意:计数有多少树上路径权值积是完全平方数
      做法:给素因子随机权值,出现次数为偶数时异或值为0,所以记录树上到根的异或值即可判断权值为完全平方的链数量。
    • P10102 矩阵
      题意:给你\(A,B,C\)三个矩阵,判断是否有\(A\times B=C\)
      做法:由于是矩阵乘法,所以大概率有 \(A\times D\times B=C\times D\)的,我们直接随机一个\(n\times 1\)\(D\) 出来即可。
      image
    • 三部图判定:
      \(O((\frac{2}{3})^npoly(n))\)
      给每个点随机一个颜色不要,那么正确的概率为\((\frac{2}{3})^n\)
      然后用 \(2-SAT\) 作判断即可。
    • Problem - 6765
      不写了,再见(
      题意:给你一棵树,定义链的权值为链上颜色数,每次询问给出两条链,问你两条链的大小关系,强制在线
      解法:
      image
      随机 \(k\)\([0,1)\) 变量的最小权值期望为 \(\frac{1}{k+1}\) 所以我们给每种颜色随机值做为权值,那么树剖查区间最小值30次即可大概率判断到,颜色少的链权值会更大。
    • Problem - I - Codeforces
      大步小步
  2. 随机抽样
    • [P6817 PA 2013] Filary
      如果 \(m=2\) 可以得到答案下界为 \(\frac{n}{2}\) 所以我们每次随机一个数必选选对的概况为 \(\frac{n}{2}\) 然后我们考虑固定一个数如何统计答案
      筛出素因子,随机赋值,异或哈希即可
    • P11620 Ynoi Easy Round 2025 TEST_34 - 洛谷
      还没做,待补
  3. 随机染色

2026/03/06

  1. E. Tourists
    不是很难,tarjan建出园方树后对树作树剖,对于每一个方点,我们维护一个 mutiset ,它的定义是儿子中权值最小的点,那么对于线段树查min值,lca是方点的时候就多查一个父亲的权值即可
    为什么园方树是对的
    考虑两个点如果可以相互到达的路径,如果遇见点双可以绕回来,那么我们直接园方树把点双的权值最小值挂给方点就是可以了
    说着码农,我就写了100来行,感觉没多少啊
  2. E. New Year Tree
    暴力柯树,搜到60种颜色就停止

2026/03/20

  1. D - Digit Sum
    考虑一个b进制中表达数n,在 \(b>\sqrt{(n)}\) 的时候,就会有一个高位带剩下0幂次的位
    所以直接根号分治
    对于小于 \(\sqrt{(n)}\) 的作枚举
    对于大于的数有方程:

\(\lfloor \frac{n}{b} \rfloor + n\%b =s\)
\(b^{K}+ n\%b =n\)

解出来就做完了

20260327

  1. A - Reversi 3

    wq,被阅读理解炸飞了。

    我们考虑问题的实质在于变换的方式

    image

    两边是一样的中间随便是什么。

    那么维护相邻位置的异或值就可以很容易发现规律。

    image

    对于这种相邻的两坨,我们将奇数位置保持不变,偶数位置为原数的异或值。

    那么对于可以操作的位置,就一定是形如 01 10 这样的东西。

    那么对于原来的序列操作,就可以看作翻转两个数,类似于排序,所以作0位置的差值和即可。

  2. B - Range Mex Sum

    考虑我们高贵 mex 的本质是区间最小没有出现过的自然数。

    那么对于我们现在询问区间 \(A\)

    维护一个集合 \(S\) 表示没有出现的整数集合。

    对于一个区间再维护一个 \(m\) 表示不在区间内的 固定值 的最小值.

    然后就可以刻画这个区间的答案贡献了

    我们记

    \(c\) 表示不在区间内的 -1 的个数。

    \(d\) 表示在区间内的 -1 的个数。

    那么考虑固定权值算次数。

    \(ans_A=c!d!\sum_{v\in S}min(v,m)(\binom{i\in S|i\ge v}{c}-\binom{i\in S|i>v}{c})\)

    也就是说外面里面全排列,权值是枚举集合外最小值两个取min,方案是要求刚好是 \(v\),所以取大于等于减大于,只剩下等于了。

    考虑怎么维护这个式子。

    我们考虑维护 \(c\)\(m\) 作为关键字对答案的贡献。

    如果我们已知一个区间对应的 \(c\)\(m\) ,是否可以直接预处理答案?

    首先枚举 \(c=[0,cnt]\) ,再作m的枚举,记得哨兵,就是对的。

    做一个类似单调不减的栈,复杂度 \(n^2\)

  3. C - Calculator

    考虑只有操作 3 4 那么这就是一个斐波拉契数列,对于操作1 2 实际上就是对最终答案加入一个斐波拉契值,那么拆贡献出来背包就做完了。

  4. D - AtArcher

    考虑处理出一只 中心箭 这只中心箭的两侧箭数量差不会超过1

    那么由于得分根据位置单调减,可以证明中心箭的位置一定在\([0,d]\) 之间,然后考虑维护唯一不同的点在于边界,乱搞一下即可。

  5. E - Tak and Hotels

    先考虑移动的规律,如果在一家酒店住下,那么到下一个酒店的时间可以累加。

    类似倍增,那么对于每一个点,维护走 \(2^n\) 天可以到达的最右边的酒店编号。

    一天的就加上\(l\) 然后 upper_bound 一下即可。

  6. D - Small Multiple

    我们考虑从1在模k的意义下开始bfs,那么当模值为0时就可以找到答案,对于数值上乘十不会影响数位和,+1则数位和+1,那么对这个东西作01bfs,在取到第一个合法位置时就是答案了。

posted @ 2026-02-11 20:40  rerecloud  阅读(13)  评论(16)    收藏  举报