2026年NOICA联盟-NOIP模拟赛(三)
http://47.113.203.55/contest/6ab0c25a5f612376a929d1db
ori:
P9836 种树
QOJ5335 Wise man
P9331 [JOIST 2023] 护照 / Passport
P5359 [SDOI2019] 染色
积因你太美 prodiv
首先 \(\prod b\) 一定等于 \(k\)。
那么分解质因数,对于 \(p^c\) 我们尽量平均分,也就是找到一个最大的 \(m\) 使得每个数的 \(p\) 的幂不小于 \(m\)。
暴力做就好了。
绅士 gentleman
被取模后会变成一个个位数,所以考虑整个过程大概是 \(a\) 到第一次取模,然后是很多次取模,到最后把剩下的次数用完。
那么就考虑这样一件事情,设 \(f_{i,mx,x}\) 表示第 \(1\sim i\) 位都是 0,第 \(0\) 位是 \(x\),\(i+1\) 位以上数位最大值是 \(mx\),要多少次操作才能进位 \(10^{i+1}\),进位后个位是多少。这个是容易预处理的。
那么对于第一部分,先从低位往高位依次进位将 \(a\) 低位变成 0,然后再从高位往低位扫让 \(a\) 进位使得 \(a<m\)。
接着用一次操作 \(a\) 就会被取模。
中间的取模部分是类似的,倍增处理。
最后也是从高位往低位扫用掉剩余次数。
宝藏解锁 treasure
等价于拓展到 \(1,n\),线段树建图后跑最短路,注意先跑到分叉点然后再去 \(i\)。
排兵布阵 soldier
赛时做法:
\(f_{i,a,b}=\sum f_{i-1,c,d}[a\ne b][a\ne c][b\ne d]=(\sum f_{i-1,c,d})-(\sum f_{i-1,a,j})-(\sum f_{i-1,j,b})+f_{i-1,a,b}\)。
维护 \(A_a=\sum f_{i,a,j},B_b=\sum f_{i,j,b},S=\sum f_{i,j,k}\) 及其历史和。
对于某列没有数,我们可以直接让 \([A_i,B_i]\) 乘上转移矩阵。
对于某列有至少一个数,只会剩下一行/一列/单点的 dp 值,这个可以记录下来。
这导出了 \(O(nm)\) 做法。
考虑其实这个东西其实只有单点清空,或者全局清空单点修改,或者全局矩乘。所以经过大量分讨可以得到 \(O(n+m)\) 做法。
考虑 \(0,0\) 的列可以快速转移,而有某个确定的数的列只有 \(O(m)\) 状态。所以考虑在相邻的有确定的数的列之间转移。
由于我们只关心不等关系,所以特殊的颜色只有几个,而剩下的状态都是可以快速转移的。
同样可以线性,码量应该比上面那个小。
浙公网安备 33010602011771号