【CF1338C】Perfect Triples【位运算】【构造】
傳送門
題意:有一序列SSS由下列方式生成:
TTT組數(shù)據(jù),求SSS的第nnn項。
T≤105,n≤1016T\leq 10^5,n\leq10^{16}T≤105,n≤1016
通過觀察樣例和理性猜想,可以假設(shè)前4k?14^k-14k?1項恰好填完了1~4k?11\sim4^k-11~4k?1,顯然這是整數(shù)個三元組。采用歸納法構(gòu)造4k~4k+1?14^k\sim 4^{k+1}-14k~4k+1?1
將每個序列中的數(shù)按二進制位兩個為一組拆分(以下稱拆成的兩個二進制位為"位"),當前的數(shù)(已構(gòu)造的和此步將構(gòu)造的)有2(k+1)2(k+1)2(k+1)位
之前填的4k?14^k-14k?1項可以看成最高位為00\texttt{00}00,我們要構(gòu)造的是最高位為01,10,11\texttt{01,10,11}01,10,11,后面kkk位分別遍歷0~4k?10\sim 4^k-10~4k?1
對于每一個(a,b,c)(a,b,c)(a,b,c)顯然有a<b<ca<b<ca<b<c
構(gòu)造aaa最高位為01\texttt{01}01,容易得到b,cb,cb,c最高位為10,11\texttt{10,11}10,11。這是最理想的結(jié)果,下面將證明這種構(gòu)造是可行的。
現(xiàn)在已經(jīng)滿足了a<b<ca<b<ca<b<c,那么a,b,ca,b,ca,b,c的后kkk位是互不影響的。下面討論的都是這后kkk位。
現(xiàn)在考慮如何最小化字典序
對于一個已經(jīng)確定的aaa,我們都需要找到最小的bbb(廢話)
對于aaa上的每一位,都找到一個最小的對應(yīng)的bbb的位即可(似乎還是廢話,但似乎就是想不到)
設(shè)新構(gòu)造的三元組為(ai,bi,ci)(0≤i≤2k?1)(a_i,b_i,c_i)(0\leq i\leq2^k-1)(ai?,bi?,ci?)(0≤i≤2k?1)顯然所有的ai=ia_i=iai?=i
根據(jù)以上信息可以構(gòu)造出(a,b,c)(a,b,c)(a,b,c)每一位字典序最小的對照表
盜用官方題解的圖:
隨便推一下就可以了
復雜度O(Tlog?n)O(T\log n)O(Tlogn)
總結(jié)
以上是生活随笔為你收集整理的【CF1338C】Perfect Triples【位运算】【构造】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【CF1311E】Construct t
- 下一篇: 地包天矫正多少钱