[AtCoder is All You Need]ABC 279 DEF - Solution
題目簡述
????????Problem D:給定函數(shù)(其中A,B為已知常量),求最小值。
????????Problem E:太難簡述了。
????????Problem F:太難簡述了。
????????原題目地址:https://atcoder.jp/contests/abc279/tasks
思路
? ? ? ? Problem D:其實(shí)我已經(jīng)翻譯得差不多了。可以直接求導(dǎo)得到唯一極值點(diǎn),由于是整數(shù),所以考慮其附近的整點(diǎn)處的函數(shù)值即可。時間復(fù)雜度為。注意到函數(shù)實(shí)際上是一個凸函數(shù),那么為了避免數(shù)值誤差,可以使用三分法,時間復(fù)雜度為
。
????????Problem E:對于每一個的查詢,事實(shí)上差別并不大(并且只用考慮元素
所處的位置),考慮遞推地計(jì)算。由于不會進(jìn)行
的交換操作,因此自然地,考慮將所有進(jìn)行的操作分兩大段處理:
之前的操作和
之后的操作。假設(shè)我們從左到右的遞推。
????????對于之前的操作,從左到右遞推是正常操作的順序,按正常進(jìn)行即可,相當(dāng)于維護(hù)一個
變量,表示當(dāng)前進(jìn)行了
之前的操作后,元素
所處的位置。更新方法為:
初值為
;當(dāng)
,則更新
;當(dāng)
,則更新
。這一點(diǎn)直接由交換操作的定義可以得出。
????????對于之后的操作,似乎處理起來比較困難。但由于交換位置操作的可逆性,我們可以遞推計(jì)算。維護(hù)
數(shù)組,表示“
之后的操作全部進(jìn)行后,某元素值所處的位置”(注意,這是一個向量,因?yàn)橐4?img type="latex" class="latex" src="http://api.bilibili.com/x/web-frontend/mathjax/tex?formula=1%5Csim%20n" alt="1%5Csim%20n">所有元素的位置)。假設(shè)我們得到了
,如何計(jì)算
呢?注意到二者唯一的差距就在于操作
是否進(jìn)行;根據(jù)
的意義,我們可以發(fā)現(xiàn),
交換的兩個元素,在最后的實(shí)際位置其實(shí)是
(因?yàn)槭菑?img type="latex" class="latex" src="http://api.bilibili.com/x/web-frontend/mathjax/tex?formula=%5C%7B1%2C...%2Cn%5C%7D" alt="%5C%7B1%2C...%2Cn%5C%7D">開始的,所以有這個結(jié)論),因此在
中只需要交換
的位置即可。
????????接下來是計(jì)算答案。在進(jìn)行完之前的操作后,問題可以等價地轉(zhuǎn)化為初始序列為
,經(jīng)過
之后的操作后,元素
所處的位置。由此可以從左到右地維護(hù)并順勢計(jì)算答案??偟臅r間復(fù)雜度為
。
????????Problem F:如果熟悉,一下子就能發(fā)現(xiàn)這是一個經(jīng)典的并查集結(jié)構(gòu):小球之間只需要明確是否歸屬同一集合。由此我們維護(hù)一個關(guān)于小球標(biāo)號的并查集,初始時,每個小球都以自己為根。問題在于如何在這樣的并查集中維護(hù)小球所屬的盒子編號;以及,為了方便修改,如何維護(hù)某盒子對應(yīng)著哪一個集合。
????????令數(shù)組表示小球所屬的盒子編號,
數(shù)組表示盒子對應(yīng)的集合的并查集根。如果一個盒子
是空的,不妨設(shè)
。下面分別敘述三個操作:
操作3:答案就是
。
操作2:把
對應(yīng)的集合作為新的根,并更新
;注意,這里其實(shí)有兩種情況,如果
,意味著
盒子是空的,不需要額外操作。如果
,就意味著
盒子不空,需要設(shè)置一下并查集的
數(shù)組。
操作1:如果
,則相當(dāng)于什么也沒干;如果
,則需要將
所在集合的盒子進(jìn)行更新:
,然后重置根:
;如果二者均非空,則需要置
。
????????上述操作仔細(xì)想想也不難明白(如果知道什么是并查集的話)??偟臅r間復(fù)雜度為。
后記
????????本場還是沒有錄像,等我什么時候能做得更好一點(diǎn)再說吧。雖然能很快找準(zhǔn)思路,但總是在奇奇怪怪的地方磕磕絆絆。
????????代碼的github地址:https://github.com/cnzzx/AlgorithmCompetitions。
????????我的E題代碼有點(diǎn)亂,如有需要,結(jié)合題解理解一下吧。