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

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

[Codeforces is All You Need] CR 843 ABCD (1775ABCD) - Solution

2023-01-11 00:22 作者:故寓諸無(wú)竟  | 我要投稿


題目簡(jiǎn)述

? ? ? ? Problem A1 / A2:給定一個(gè)長(zhǎng)度為n的只含字母'a'和字母'b'的字符串s,判斷能否按順序劃分成非空的三個(gè)子串a%2Cb%2Cc,使得b的在字典序意義下,要么同時(shí)不比a%2Cc大,要么同時(shí)不比a%2Cc小。

????????Problem B:給定一個(gè)長(zhǎng)度為n的序列c。判斷能否將c劃分成兩個(gè)不同(指所取的下標(biāo)不同)的非空子序列ab,使得子序列中元素按位或的結(jié)果相等。

????????Problem C:給定n%2Cx,解方程

n%5C%26%20(n%2B1)%20%5C%26%20...%20%5C%26m%20%3D%20x

????????其中m%5Cge%20n。如果解存在,要求給出最小的解。

????????Problem D:給定一個(gè)長(zhǎng)度為n的數(shù)組a。如果a_ia_j不互質(zhì),則在i%2Cj之間連一條邊。給定起點(diǎn)和終點(diǎn)1%5Cle%20s%2Ct%5Cle%20n,求最短路徑,要求輸出其中一種行走方案。

????????原題目地址:https://codeforces.com/contest/1775

思路

????????Problem A1 / A2:一個(gè)小小的分類(lèi)討論題目,不想多說(shuō),詳見(jiàn)代碼。

????????Problem B:按位或操作相當(dāng)于集合取并集。要想兩個(gè)子序列不同,最簡(jiǎn)單的制造不一致的方法是選擇一個(gè)被ab公共部分代表的集合包含的元素c_i,使得a不含c_ib包含c_i。如果連這種最簡(jiǎn)單的情形都無(wú)法成立,則無(wú)解。

????????因此只需要依次判斷每個(gè)元素的各個(gè)二進(jìn)制位是否獨(dú)自瀟灑(我是指是不是只有它在這一位上為1)。對(duì)于元素c_i,一旦存在這么一個(gè)瀟灑的二進(jìn)制位,意味著它不可能被其它任何元素組代表的集合組的并集所包含。反之,把其它元素全選上,再利用c_i就可以按前述策略制造不一致。用一個(gè)桶記錄一下各個(gè)位上1出現(xiàn)的個(gè)數(shù),可以輕松完成判斷,復(fù)雜度為O(%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%20k_i),其中k_i表示c_i的二進(jìn)制位中1的數(shù)目。

????????后話(huà):雖然非常淺顯,但是可以硬來(lái)證明一下最開(kāi)始提到的情形確實(shí)是“最簡(jiǎn)單的情形”,我將直接使用用集合的語(yǔ)言來(lái)說(shuō)明。這個(gè)“最簡(jiǎn)單”是指所有可行的集合序列c,均存在對(duì)應(yīng)的集合c_i和某個(gè)下標(biāo)序列%5Cpi,使得:

c_i%20%5Csubseteq%20%5Cbigcup_%7Bj%3D1%7D%5E%7Bt%7D%20c_%7B%5Cpi_j%7D%2Ci%5Cnotin%20%5Cpi

????????開(kāi)證。因?yàn)榧闲蛄?img type="latex" class="latex" src="http://api.bilibili.com/x/web-frontend/mathjax/tex?formula=c" alt="c">可行,因此存在下標(biāo)序列a%20%5Cne%20b

%5Cbigcup_%7Bu%3D1%7D%5Ep%20c_%7Ba_u%7D%20%3D%20%5Cbigcup_%7Bv%3D1%7D%5E%7Bq%7Dc_%7Bb_v%7D

????????由于a%20%5Cne%20b,因此存在b_e%20%5Cnotin%20a,使得:

c_%7Bb_e%7D%20%5Csubseteq%20%5Cbigcup_%7Bv%3D1%7D%5E%7Bq%7Dc_%7Bb_v%7D%20%3D%20%5Cbigcup_%7Bu%3D1%7D%5E%7Bp%7Dc_%7Ba_u%7D

????? ? 令%5Cpi%20%3A%3D%20a%2Ci%3A%3Db_e,這就完成了證明。

????????Problem C:按位與操作相當(dāng)于集合取交集,所以伴隨m,左式會(huì)越來(lái)越小。在這一長(zhǎng)串連續(xù)按位之中,左式是以何種方式變小呢?例如:

n%3D(%5Ccdots%2001110)_2

????????我們驚訝的發(fā)現(xiàn),和n%2B1按位與一下并不會(huì)影響結(jié)果,因?yàn)槌俗畹臀?,二者完全一致,而最低位已?jīng)是0了,無(wú)法被按位與改變。而:

n%2B2%20%20%3D%20(%5Ccdots%2010000)_2

????????一旦它參與進(jìn)來(lái),連續(xù)的三個(gè)1將無(wú)一幸免永遠(yuǎn)變成0。事實(shí)上,這一規(guī)律具有普適性。即對(duì)于任意位置的連續(xù)1,當(dāng)且僅當(dāng)在m達(dá)到在這些連續(xù)1的位置恰好變成了0,且連續(xù)1的最高位再高一位由0變成1時(shí),才會(huì)將這一段連續(xù)1一并永久變?yōu)?/strong>0

????????于是,可能的關(guān)鍵節(jié)點(diǎn)不超過(guò)63個(gè)(當(dāng)然,其實(shí)只有這個(gè)數(shù)的一半左右)。因此我們可以枚舉n的二進(jìn)制表示中所有連續(xù)1片段,計(jì)算其對(duì)應(yīng)的m節(jié)點(diǎn),以及按位與的最終結(jié)果。這里不詳述計(jì)算方案,最后的復(fù)雜度是O(1)

????????Problem D:原始的圖太大了,沒(méi)有辦法直接建圖再跑BFS。但是節(jié)點(diǎn)是以互質(zhì)關(guān)系來(lái)確定連接的,因此我們可以考慮從質(zhì)因子出發(fā)做文章。st如果不直接相連,說(shuō)明它們沒(méi)用公共質(zhì)因子(也就是互質(zhì)了)。如何讓它們連起來(lái)呢?需要找到一些中介??紤]一階的情形,比如86有公共質(zhì)因子2,615有公共質(zhì)因子3,這就把s%3D8t%3D15連上了。有了這一思考的基礎(chǔ),我們?yōu)槭裁匆詳?shù)組元素為節(jié)點(diǎn)建圖呢?

????????直接以質(zhì)因子為節(jié)點(diǎn)建圖,這樣每一個(gè)數(shù)組元素意味著若干個(gè)質(zhì)因子之間的連接關(guān)系。這樣邊%5Cleft%3Cx%2Cy%20%5Cright%3E就表示“從包含某個(gè)質(zhì)因子x的數(shù)出發(fā),經(jīng)過(guò)邊所代表的數(shù)組元素,可以與另一個(gè)包含質(zhì)因子y的數(shù)相連”。每個(gè)數(shù)組元素至多產(chǎn)生2%20%5Ctimes%20%5Cbinom%7B5%7D%7B2%7D%20%3D%2020條邊(雙向邊存成兩條有向邊),這樣新圖僅包含約20000個(gè)節(jié)點(diǎn)和6000000條邊,直接使用BFS求最短路,復(fù)雜度為O(V%2BE)。當(dāng)然,需要一些瑣碎的操作記錄一條最短路徑。

后記

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

????????A題的分類(lèi)討論花了我50分鐘。不然E是有機(jī)會(huì)做的。煩躁。


[Codeforces is All You Need] CR 843 ABCD (1775ABCD) - Solution的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
长丰县| 东宁县| 桐庐县| 赤城县| 岳普湖县| 开原市| 汉川市| 南皮县| 乐陵市| 云霄县| 蒙城县| 枝江市| 安达市| 修水县| 北碚区| 聂拉木县| 安陆市| 哈尔滨市| 广饶县| 肥城市| 乌拉特后旗| 兰考县| 开原市| 光山县| 左云县| 湖州市| 宁蒗| 香格里拉县| 色达县| 长宁区| 介休市| 库车县| 永丰县| 辽阳市| 高台县| 福清市| 赞皇县| 舟曲县| 辽源市| 绥阳县| 安西县|