【省選模擬】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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章