【省选模拟】20/03/04

calculuscalculus

  • 显然可以发现,出题人用了很多奇怪的方法包括增长题面,使题面晦涩难懂,定义新的位运算,输入一堆奇怪的式子来增加题面难度

  • 题意,你有 k4k\le 4 个变元 x1xkx_1\dots xk,分别可以取真或假,有两种运算 ,\sim,\otimes,表示取反和 ab=(a)ba\otimes b=(\sim a)|b,输入一个含变元和 QQ 的表达式,其中 QQ 为一串变元通过上述两种符号串成的表达式,并且 QQ 中包涵 nn 个符号,我们需要确定有多少个 QQ 满足无论 xx 怎么去结果都为真
    n70,k4,q500,len4000n\le 70,k\le 4,q\le 500,len\le 4000

  • 暴力:枚举 QQ2k2^k 种变元

  • 优化,将 2k2^k 种变元排成一列状压每一种变元是真是假,枚举当前符号是 \sim 还是 \otimes 转移,即:
    f[i][j]=f[i1][j]+k=0i1ab=jf[k][a]f[i1k][b]f[i][j]=f[i-1][\sim j]+\sum_{k=0}^{i-1}\sum_{a\otimes b=j}f[k][a]*f[i-1-k][b]
    后面用 fwtfwt 转移,只需要做 nnfwtfwt, 剩余点乘,复杂度 O(n222k+2k22k)O(n^2*2^{2^k}+2^k*2^{2^k})
    现在有了初始表达式的限制,我们枚举每一种变元看 QQ 是必须为 0/10/1 还是均可均不可
    这个可以直接用栈搞一个括号匹配模拟,复杂度 O(mlen2k)O(m*len*2^k)
    CodeCode


ConciseConcise

  • f(i)=j=1i(s(i)s(j1))k=l=0k(kl)s(i)lj=0i1s(j)klf(i)=\sum_{j=1}^i(s(i)-s(j-1))^k=\sum_{l=0}^k\binom{k}{l}s(i)^l\sum_{j=0}^{i-1}s(j)^{k-l}
    维护后面的前缀和,复杂度 O(nk)O(nk)
    CodeCode

Fancy:Fancy:

  • 题意:3 棵树,求出以下 3 者的 min,maxmin,max
  • 第一棵树的两两距离和
  • 第一棵树和第二棵树连一条边后两两距离和
  • 第一棵和第二棵树连一条边,第二课树和第三棵连一条边后两两距离和

题解:

  • 第一个是定值,假设三棵树的大小分别是 n1,n2,n3n_1,n_2,n_3,第二个选到点分别是 u,vu,v,所有点到 u,vu,v 的距离和是 Su,SvS_u,S_v,那么新增贡献是 Sun2+Svn1+n1n2S_u*n_2+S_v*n_1+n_1*n_2,分别取 v,uv,u 的最大最小
  • 第三个,讨论 (1,2),(1,3),(2,3)(1,2),(1,3),(2,3) 的新增贡献,把常数项抛开
    San2+S1n1+S2n3+Scn2+S1n3+Scn1+dis(1,2)n1n3S_a*n_2+S_1*n_1+S_2*n_3+S_c*n_2+S_1*n_3+S_c*n_1+dis(1,2)*n_1*n_3
    Sa,ScS_a,S_c 分别取最大最小,那么还剩 n1S1+n3S2+dis(1,2)n1n3n_1S_1+n_3S_2+dis(1,2)n_1n_3,最小化就是 S1,S2S_1,S_2 均取最小,最大化可以用点分治 树形dpdp,枚举 11,维护 n3S2+disn1n3n_3S_2+dis*n_1n_3 的最大值即可
    CodeCode
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章