做题记录二

写在前面:

多做,少胡

以下是正文:

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,在取到第一个合法位置时就是答案了。

20260328

260328 - 题单 - 洛谷 | 计算机科学教育新生态

  1. E - Avoiding Collision

    考虑容斥,用所有情况减去不合法的情况。

    跑一个次数最短路,在刚好可以松弛的时候选择加入次数,在必须松弛的时候更新次数,这样就维护出了以S为起点和以T为起点的信息。

    首先根据乘法原理,总方案就是 \(S\to T\) 的方案数乘上 \(T\to S\) 的方案数。

    由于是双向边,所以其实这两个玩意是一样的。

    然后考虑什么时候是不合法的。

    设从 \(S\) 出发的最短路数组和次数数组叫做 \(disS,fS\)

    \(T\) 出发的最短路数组和次数数组叫做 \(disT,fT\)

    将不合法的分类成点相遇和边相遇。

    对于点相遇情况,我们枚举每一个点 \(u\)

    首先第一个条件就是 \(disS[u]+disT[u]=disS[T]\)

    由于走的都是最短路相遇,所以只会相遇一次,那么还有一个条件在于

    \(disS[u]=disT[u]=\frac{disS[T]}{2}\)

    这样经过这个点的方案数就是 \(fS[u]\times fT[u]\)

    那么两个人同时经过这个点的方案数就是 \((fS[u]\times fT[u])^2\)

    对于边相遇情况,我们枚举每一条边,已知一条边是连接 \(u,v\) 且边权是 \(w\)

    那么如果两个人都要经过这条边,最短路条件就是 \(disS[u]+disT[v]+w=disS[T]\)

    我们不能确定 \(u,v\) 那个更靠近 \(S\) ,所以两边都要试一下

    然后如果是必须经过,那么 \(disS[u]+w>disT[v],disT[v]+w>disS[u]\)

    也是两边各占一半的道理。

    方案数类似点相遇 \((fS{u}\times fT[v])^2\)

    用总方案减去这两坨玩意就是答案了。

  2. F - Normalization

    套路的,发现设 \(a=0,b=1,c=2\) 那么在变换后 模3 意义下数字和不变。

    而且操作后一定会有相邻相等的数字。

    发现对于 \(n>3\) 且存在相邻不同字符串 \(S\) ,所有存在相邻相同字符且数字和同余 \(S\) 的等长字符串 \(T\) 也一定可以由 \(S\) 操作得到。

    考虑证明这个结论。

    假设这个结论在长度为 \(k\) 的字符串中成立。

    那么对于长度为 \(k+1\) 的字符串,我们由于模三意义下相同,所以一定可以通过某种方式将两个字符串的首字母变得相同。

    当两个字符串首字母相同了,对于剩下长度为 \(k\) 的字符串,就成立了。

    答案即为满足数位和模 3 同余初始串且含有相邻相等的数字的数字串个数

    然后我们对这个东西作容斥。

    将答案转化成 同余串个数 - 同余不包含相邻相同字符

    对于同余串个数,明显是 \(3^{n-1}\) 也就是前面随便放,后面根据前面放的补全。

    对于后面,我们定义 \(f[i][j][k]\) 表示 前 \(i\) 个字符,此时模三意义下的数位和是 \(j\), 最后一位填的数是 \(k\)的方案数。

    那么dp的转移方程就是:

    \(f[i][j][k]=\sum_{l=0}^2[k!=l]f[i-1][(j-k+3)\%3][l]\)

    转移出来就做完了。

  3. D - Median of Medians

    经典中位数,考虑答案具有单调性,所以我们考虑二分答案

    怎么check?

    把大于的数看作1,小于的数看作1

    那么区间前缀和然后扫描线碾过去,统计 \(he[r]\ge he[l-1]\) 的数量

    这样就可以知道这个数可以作为多少个区间的中位数

    那么合法条件就是是区间数目一半以上就是合法的了

    还有一个小技巧,我们考虑到中位数只会在区间元素中。

    所以之间对这个序列作二分 check 就行了。

20260329

  1. D - Concat Power of 2

    被观察题薄纱了\kel

    首先这个如果去作数论分析是非常困难的

    但是题目里面有一句话提醒了我们

    • The N-th smallest good integer is at most \(10^9\)

    也就是说第 \(N\) 个好数字不会超过 \(1e9\)

    观察样例可以发现:

    \(1099898\) 也就是 第\(1e6\) 多一点的位置的好数字大小已经到了 \(819264512\)

    大胆猜测一下,我们的 \(N\) 不会太大。

    暴力跑一边 \(bfs\) 拼字符串,发现小于 \(1e9\) 的好数字只有 \(1257875\) 个,直接输出第 \(n\) 个就可以了。

  2. E - Tree Distance

    首先有结论: 一棵树上\(dis(i,k)+dis(k,j)\ge dis(i,j)\)

    现在我们要构造一棵树,且满足这个条件。

    如果我们每个点只连一条边,那么肯定是与dis 最小的点连边。

    那么考虑对这个东西作最小生成树,得到的一定是最优的建树方法。

    建出来后对每个点跑 \(dfs\) 处理出一个点和其他点的距离,再去和原权值比较即可。

  3. F - Make Bipartite 3

    首先的性质在于只要一处不合法,那么之后再也不会合法了。

    考虑维护带权异或并查集,

    ARC217

  4. A - Min of Sum of XOR

    题意是问你让你构造一个 \(1\to n\) 的排列 \(P\)

    最小化式子:
    \(\sum_{i=1}^n ⨁_{1\le j \le i} P_j\)

    也就是最小化前缀异或和之和。

    我们一样拆位来考虑贡献。

    对于每一位 \(k\) 表示为 \(2^k\)

    那么对于位置 \(k\) 上值为 \(1\) 的数。

    \(k\ge 2\) 时,一定是成群完整地出现。

    所以我们把每四个数放在一起考虑。

    这样高位的异或和肯定为 \(0\)

    考虑低位的异或和,那么参照样例,可以发现每四位的异或和也是 \(0\)(将样例看作 \(0\;1\;2\;3\)),不过要交换每四个中的 \(3,4\) 位即可。

    对于没有第一第二第三位,不影响答案的构造,没有第四位就只能输出下一位。

  5. C - Greedy Customers 2

    题意是给你 \(n\) 个货物,然后有 \(n\) 个人来买东西,每个人的钱数随机在 \([1,c]\) 里面,随机到的钱数如果比最贵的物品贵,就买下,问恰好购买 \(k\) 个物品的概率, \(k\)\([0,n]\)

    \(dp\) !

  6. B - Not High Element

    题意是给你一个排列的前 \(k\) 项,问你在确定前 \(k\) 项,大小为 \(n\) 的所有 \((n-k)!\) 种可能排列 \(p\) 中。

    求式子的值: \(\sum_{P}f(P)\)

    \(f(P)\) 的定义为:
    对于排列,每次操作可以将一个非前缀最大值的数提到排列的最前面,这种操作的最大次数就是 \(f(p)\) 的值。

    我们考虑对于最后的序列一定是一个从1到n的排列,所以先考虑如何快速算出一个排列的贡献。

    非常容易可以发现,对于一个非前缀最大值的数 \(x\) ,将其移到前面去后,后边就会有 \(x-1\) 个比他小的数可以往前提。

    那么手推一下就会有发现贡献是 \(2^{x-1}\)

    对于给定的前面先手动处理前缀最大值来算贡献,然后对于已知未出现但是在后面比最大值小的数,就可以算全贡献,

    对于在后面但是比前缀已知最大值的数,出现在前缀最大值的次数为 \(\frac{(n-k)!}{n-k+1}\)

    对这个再算一次贡献就是了。

popsicle

我们记 \(L\) 是总周期,理论上是所有 \(l_i\) 的最小公倍数。

那么我们的答案式子可以写成:\(\frac{1}{L}\sum_{t=0}^{L-1}(1-\prod_i(1-p_{i,t\mod l_i}))\)

首先有结论:

\(gcd(l_i,l_j)=1,ans=\sum_{t=0}^{l_i-1}p_{i,t}\times\sum_{t=0}^{l_j-1}p_{j,t}\)
image

手推不难发现是对的。

把所有天按

$t ≡ T( \mod 2520) $

分成 2520 类。

image

我们设某家店的周期是 \(i\)

那么它每次访问的位置就会变成:

\(T+k\cdot2520\)

比如 \(i=6\) ,那么从第1天开始(\(T=1\))每 \(2520\) 天中,

因为 \(2520 \mod 6=0\),所以永远是:

1,1,1,1,…1,1,1,1,…

分完后我们算出所有的类天的平均贡献,求和后乘逆元就是答案。

如果你随便选一个 K,那么固定 \(t≡T(modK)\) 后,店 i 的新周期是:

\(\frac{1}{gcd(i,K)}\)

我们要考虑所有按照这个顺序分完后,任意周期要么互质,要么一个被另一个整除,

\(2520=2^3\times3^2\times5\times7\)

假设我们有两个店周期:

  • \(l_1\) = \(8\)
  • \(l2\) = \(12\)

如果选 \(K=10\)

  • 新周期长度:
    • \(l_1/ gcd(8,10) = 8 / 2 = 4\)
    • \(l2 / gcd(12,10) = 12 / 2 = 6\)
  • 新周期长度分别是 \(4\)\(6\)
  • 这两个长度:
    • 不互质
    • 也不整除

这样就不可以直接乘起来求答案或者合并了

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