专栏文章

abc390又没ak

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqe3a7m
此快照首次捕获于
2025/12/04 03:18
3 个月前
此快照最后确认于
2025/12/04 03:18
3 个月前
查看原文

D - Stone XOR

注意到就是把这些数分组,答案是每组加法和的异或和。
异或运算是存在交换律的,所以分组的方案就是 B(n)=[xn]exp(ex1)B(n)=[x^n]\exp(e^x-1)
检验发现 B(n)B(n) 不是很大,于是暴力深搜即可。

E - Vitamin Balance

注意到三种维生素是独立的,即一个物品只对一种维生素做贡献。
于是可以先 O(NX)O(NX) 的跑一遍背包,得到 fi,jf_{i,j} 表示不超过 jj 的代价最多得到 ii 类维生素 fi,jf_{i,j} 单位。
然后可以二分答案。如何算答案下的代价呢?直接在 fif_i 数组上二分,找到对应下标加上就好了。
关键代码:
CPP
//f[i][x+1]=1e9+1;
bool ck(int ans){
    int res=0;
    for(int i=1;i<=3;i++){
        res+=lower_bound(f[i]+1,f[i]+1+x+1,ans)-f[i];
    }
    return res<=x;
}

F - Double Sum 3

f(L,R)f(L,R) 即统计 A[L,R]A[L,R] 中的数字连续段个数。
我们直接统计有多少个 ii 满足 iA[L,R]i+1∉A[L,R]i \in A[L,R] \wedge i+1 \not\in A[L,R],就可以求得 f(L,R)f(L,R)
换个方向,我们只要对于每个 ii,求得有多少个 (L,R)(L,R) 满足 iA[L,R]i+1∉A[L,R]i \in A[L,R] \wedge i+1 \not\in A[L,R] 就是答案了。
考虑 xAx=i+1x=0x=n+1x|A_x=i+1 \vee x=0 \vee x=n+1。他们把序列分为若干区间。要每个区间中有多少子区间含有 ii。假设 L,RL,R 中的所有 ii 的位置与 LL 按顺序构成序列 PP,答案就是 i1(pipi1)(Rpi+1)\sum_{i \geq 1}(p_i-p_{i-1})(R-p_i+1)。直接统计就是线性的。

G - Permutation Concatenation

观前提示:3×1053 \times 10^566 个数,而不是 55 个(不要问为什么要提示)。

考虑先求出 lenilen_i 表示长度为 ii 的数有多少个,以及 sis_i 表示长度为 ii 的数之和。
我们对数 xx 统计其造成的所有贡献,可以写出(注意 xx 对应的 lenlen 要减 11):
{vi}(xi=16(10i)vi)(i=16(lenivi))(vi)!(n1vi)!\sum_{\{v_i\}}(x\prod_{i=1}^{6}(10^{i})^{v_i})(\prod_{i=1}^{6}\binom{len_i}{v_i})(\sum v_i)!(n-1-\sum v_i)!
稍微解释下,枚举每种数有多少个在 xx 之前,然后贡献就是 (xi=16(10i)vi)(x\prod_{i=1}^{6}(10^{i})^{v_i}),方案数就是 (vi)!(n1vi)!(\sum v_i)!(n-1-\sum v_i)!
整理一下:
{vi}x(i=16(10i)vi(lenivi))(vi)!(n1vi)!\sum_{\{v_i\}}x(\prod_{i=1}^{6}(10^{i})^{v_i}\binom{len_i}{v_i})(\sum v_i)!(n-1-\sum v_i)!
设哑元 L(ui)=i!(n1i)!L(u^i)=i!(n-1-i)!,根据线性性,原式:
x{vi}(i=16(lenivi)(10iu)vi)=xi=16(1+10iu)lenix\sum_{\{v_i\}}(\prod_{i=1}^{6}\binom{len_i}{v_i}(10^iu)^{v_i})\\=x\prod_{i=1}^{6}(1+10^iu)^{len_i}
直接对同一类数求和,答案就是:
i=16sij=16(1+10ju)lenj[j=i]ans=i=16k=0n1sik!(n1k)![uk]j=16(1+10ju)lenj[j=i]\sum_{i=1}^{6}s_i\prod_{j=1}^{6}(1+10^ju)^{len_j-[j=i]}\\ans=\sum_{i=1}^{6}\sum_{k=0}^{n-1}s_ik!(n-1-k)![u^k]\prod_{j=1}^{6}(1+10^ju)^{len_j-[j=i]}
具体求解可以先快速幂 O(nlog2n)O(n\log^{2}{n}) 求出,再除掉一个 (1+10iu)(1+10^{i}u),容易做到 O(n)O(n)
时间复杂度就是 O(nlog2n+V(n+k)),V=6O(n\log^2{n}+V(n+k)),V=6

评论

0 条评论,欢迎与作者交流。

正在加载评论...