最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

[AtCoder is All You Need]ABC 279 DEF - Solution

2022-11-26 23:52 作者:故寓諸無竟  | 我要投稿

題目簡述

????????Problem D:給定函數(shù)%5Cfrac%7BA%7D%7B%5Csqrt%7B1%2Bx%7D%7D%20%2B%20B%5Ccdot%20x%20%5Cquad%20(x%20%5Cin%20N)(其中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ù)雜度為O(1)。注意到函數(shù)實(shí)際上是一個凸函數(shù),那么為了避免數(shù)值誤差,可以使用三分法,時間復(fù)雜度為O(%5Clog%20%5Cfrac%7BB%7D%7BA%7D)。

????????Problem E:對于每一個i的查詢,事實(shí)上差別并不大(并且只用考慮元素1所處的位置),考慮遞推地計(jì)算。由于不會進(jìn)行B_%7BA_i%7D%2CB_%7BA_%7Bi%2B1%7D%7D的交換操作,因此自然地,考慮將所有進(jìn)行的操作分兩大段處理:i之前的操作和i之后的操作。假設(shè)我們從左到右的遞推。

????????對于i之前的操作,從左到右遞推是正常操作的順序,按正常進(jìn)行即可,相當(dāng)于維護(hù)一個c_i變量,表示當(dāng)前進(jìn)行了i之前的操作后,元素1所處的位置。更新方法為:c_1初值為1;當(dāng)A_%7Bi%7D%20%3D%20c_%7Bi-1%7D,則更新c_i%3A%3Dc_%7Bi-1%7D%2B1;當(dāng)A_%7Bi%7D%2B1%20%3D%20c_%7Bi-1%7D,則更新c_i%3A%3Dc_%7Bi-1%7D-1。這一點(diǎn)直接由交換操作的定義可以得出。

????????對于i之后的操作,似乎處理起來比較困難。但由于交換位置操作的可逆性,我們可以遞推計(jì)算。維護(hù)p_i數(shù)組,表示“i之后的操作全部進(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è)我們得到了p_%7Bi-1%7D,如何計(jì)算p_i呢?注意到二者唯一的差距就在于操作i是否進(jìn)行;根據(jù)p_%7Bi-1%7D的意義,我們可以發(fā)現(xiàn),A_i%2CA_%7Bi%2B1%7D交換的兩個元素,在最后的實(shí)際位置其實(shí)是p_%7Bi-1%7D(A_%7Bi%7D)%2Cp_%7Bi-1%7D(A_%7Bi%2B1%7D)(因?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é)論),因此在p_i中只需要交換p_%7Bi-1%7D(A_%7Bi%7D)%2Cp_%7Bi-1%7D(A_%7Bi%2B1%7D)的位置即可。

????????接下來是計(jì)算答案。在進(jìn)行完i之前的操作后,問題可以等價地轉(zhuǎn)化為初始序列為%5C%7B1%2C...%2Cn%5C%7D,經(jīng)過i之后的操作后,元素c_i所處的位置。由此可以從左到右地維護(hù)并順勢計(jì)算答案??偟臅r間復(fù)雜度為O(n)

????????Problem F:如果熟悉,一下子就能發(fā)現(xiàn)這是一個經(jīng)典的并查集結(jié)構(gòu):小球之間只需要明確是否歸屬同一集合。由此我們維護(hù)一個關(guān)于小球標(biāo)號的并查集,初始時,每個小球都以自己為根。問題在于如何在這樣的并查集中維護(hù)小球所屬的盒子編號;以及,為了方便修改,如何維護(hù)某盒子對應(yīng)著哪一個集合。

????????令b數(shù)組表示小球所屬的盒子編號,rt數(shù)組表示盒子對應(yīng)的集合的并查集根。如果一個盒子i是空的,不妨設(shè)rt_i%20%3D%20-1。下面分別敘述三個操作:

  • 操作3:答案就是b_%7Bfind(x)%7D。

  • 操作2:把k%2B1對應(yīng)的集合作為新的根,并更新b_%7Bk%2B1%7D%20%3A%3D%20x%2Crt_%7Bx%7D%3Dk%2B1;注意,這里其實(shí)有兩種情況,如果rt_x%3D-1,意味著x盒子是空的,不需要額外操作。如果rt_x%20%5Cne%20-1,就意味著x盒子不空,需要設(shè)置一下并查集的pa數(shù)組。

  • 操作1:如果rt_y%3D-1,則相當(dāng)于什么也沒干;如果rt_x%3D-1,則需要將rt_y所在集合的盒子進(jìn)行更新:b_%7Brt_y%7D%20%3A%3D%20x%20,然后重置根:rt_x%20%3A%3D%20rt_y%2Crt_y%20%3A%3D%20-1;如果二者均非空,則需要置pa(rt_y)%20%3A%3D%20rt_x%2Crt_y%3A%3D-1

????????上述操作仔細(xì)想想也不難明白(如果知道什么是并查集的話)??偟臅r間復(fù)雜度為O(n)

后記

????????本場還是沒有錄像,等我什么時候能做得更好一點(diǎn)再說吧。雖然能很快找準(zhǔn)思路,但總是在奇奇怪怪的地方磕磕絆絆。

????????代碼的github地址:https://github.com/cnzzx/AlgorithmCompetitions。

????????我的E題代碼有點(diǎn)亂,如有需要,結(jié)合題解理解一下吧。


[AtCoder is All You Need]ABC 279 DEF - Solution的評論 (共 條)

分享到微博請遵守國家法律
南部县| 吴江市| 锡林浩特市| 拜泉县| 游戏| 潢川县| 兴安盟| 商水县| 马尔康县| 武安市| 鲁山县| 福贡县| 襄城县| 平阳县| 苍梧县| 东城区| 博爱县| 大田县| 邓州市| 兴和县| 蒙自县| 安乡县| 盱眙县| 庆元县| 博客| 琼中| 锡林郭勒盟| 岢岚县| 姚安县| 浦江县| 台州市| 会同县| 洪江市| 井冈山市| 霍林郭勒市| 宣汉县| 同德县| 阿鲁科尔沁旗| 原平市| 克什克腾旗| 中山市|