AGC047A Integer Product
給定 \(n\) 個浮點數 \(a_i\) ,問有多少組數對 \((i,\ j)\) 滿足 \(a_i\cdot a_j\) 是整數
- \(n\leq2\times10^5\)
- \(a_i\) 小數點后只有不超過 \(9\) 位數
\(a_i\) 的小數點前部分可以丟掉,將小數點后部分看成 \(\frac k{2^a\times5^b}\) 的形式,其中 \(k\) 是整數, \(a,\ b\) 要盡量小
然后即求滿足 \(a_i+a_j\ge0,\ b_i+b_j\ge0\) 的數對個數,值域很小暴力即可
AGC047B First Second
給定 \(n\) 個串 \(S_i\) ,定義對串 \(T\) 的一次變換為刪掉 \(T\) 的第一個或第二個字符,問有多少個二元組 \((i,\ j)\) 滿足能夠通過對 \(S_i\) 進行若干次變換使得其等於 \(S_j\)
- \(n\leq2\times10^5\)
- \(\displaystyle\sum|S_i|\leq10^6\)
\(S_i\) 能夠進行若干次變換使得其等於 \(S_j\) ,當且僅當 \(S_j\) 是 \(S_i\) 的后綴,或 \(S_j\) 去掉第一個字符后是 \(S_i\) 的后綴、且 \(S_j\) 的第一個字符在 \(S_i\) 的前 \(|S_i|-|S_j|+1\) 個字符中出現過
把所有串倒着插入 trie 中搞一搞即可
AGC047C Product Modulo
我沒有多項式基礎
留坑待填
AGC047D Twin Binary Trees
有兩棵點數同為 \(n\) 的滿二叉樹,第一棵樹的第 \(i\) 個葉節點向第二棵樹的第 \(A_i\) 個節點連了一條特殊邊
在所有邊構成的圖上,一個環是合法的,當且僅當它是簡單環,並且恰好經過兩條特殊邊
定義一個合法環的權值為它所經過的所有點的編號的乘積
求所有簡單環的權值之和 \(\bmod10^9+7\)
\(n<2^{18}\)
做法一:
枚舉特殊邊 \((u,\ v)\) ,設環經過的另一個特殊邊為 \((u_0,\ v_0)\) ,其中 \(u,\ u_0\) 在第一棵樹上, \(v,\ v_0\) 在另一棵
接着枚舉 \((u,\ u_0)\) 和 \((v,\ v_0)\)它們在各自樹中的 lca
大概套個二維數點就得到了一個時間 \(O(n\log^3 n)\) 的優秀做法
大概搞一個線段樹合並就可以優化到 \(O(n\log^2 n)\)
做法二:
枚舉 \((u,\ u_0)\) 的 lca \(w\)
枚舉 \(w\) 左子樹中的所有葉子節點 \(i\) ,其中 \(i\) 在另一棵樹上的對應點為 \(j\) ,將 \(j\) 的所有祖先 \(p\) 累加 \(i\) 到 \(p\) 的最短路徑上的節點的乘積
枚舉 \(w\) 右子樹中的所有葉子節點 \(i\) ,其中 \(i\) 在另一棵樹上的對應點為 \(j\) ,枚舉 \(j\) 的所有祖先 \(p\) ,用 \(i\) 到 \(p\) 的最短路徑與 \(p\) 的兄弟的信息統計對答案造成的貢獻
大概就做到了時間 \(O(n\log^2n)\) ,空間線性
AGC047E Product Simulation
有一個序列 \(a_0,\ a_1,\ \cdots,\ a_n\) ,初始時 \(a_0=A,\ a_1=B;\ a_2=a_3=\cdots=a_n=0\)
你可以執行至多 \(q\) 次操作,每次操作有兩種:
- \(+\ i\ j\ k\) :令 \(a_k=a_i+a_j\)
- \(<\ i\ j\ k\) :令 \(a_k=[a_i<a_j]\)
你需要構造一種操作序列使得,無論 \(A,\ B\) 是任何非負整數,執行完所有操作后 \(a_2=A\cdot B\)
- \(n,\ q=2\times10^5\)
- \(A,\ B\in[0,\ 10^9]\)
假設 \(A,\ B\) 中至少有一個非零
則通過 \(A<A+A+B+B\) 就能構造出元素 \(1\)
通過 \(1\) 自加就能得到所有 \(2\) 的冪次
考慮將 \(A,\ B\) 表示為二進制數
按 \(bit\) 降序考慮,考慮等式 \(f_{bit}=[cur+2^{bit}<A+1]\) ,若 \(f_i=1\) 就將 \(cur\) 加上 \(2^{bit}\) ,即可求出 \(A\) 的所有二進制位;同理可求得 \(B\) 二進制下每一位 \(g_{bit}\)
現在即求 \(\displaystyle\sum_{i,\ j}f_ig_j2^{i+j}\)
枚舉 \(i,\ j\) , \(2^{i+j}\) 部分已經預處理了,現在只用處理兩個 \(01\) 變量 \(x,\ y\) 的與操作,實際上就是 \(1<x+y\)
總操作數 \(O(\log^2A)\)
可以發現 \(A=B=0\) 時不用特判
AGC047F Rooks
留坑待填