Codeforces Round #706 個(gè)人題解

比賽鏈接:https://codeforces.com/contest/1495? https://codeforces.com/contest/1496
官方題解:https://codeforces.com/blog/entry/88533
難度:Div1&2


Div2A Split it!
題意:給定一個(gè)長(zhǎng)度為 字符串
與
,問這個(gè)字符串能否劃分為
的形式,其中?
表示將串?
反轉(zhuǎn)得到的字符串。
題解:易得 與
是互為反轉(zhuǎn)的串,中間需要插入一個(gè)
。找到?
中最長(zhǎng)互為反轉(zhuǎn)的前后綴長(zhǎng)度,然后與?
作比較即可。注意特判
為空串的情況,時(shí)間復(fù)雜度
。
Div2B Max and Mex
題意:定義? 為集合?
中的最大值,
為集合?
中未出現(xiàn)的最小非負(fù)整數(shù)。給定?
的初始情況,然后執(zhí)行?
次將?
插入?
中的操作,求?
中最后有多少個(gè)互不相同的數(shù)。
題解:初始時(shí)若 ,此時(shí)必有
,
,
,
,則每次執(zhí)行插入操作都會(huì)將?
插入,最終?
中會(huì)增加?
個(gè)數(shù)。初始時(shí)若
,則必有
,此時(shí)插入操作并不會(huì)改變?
與
,因此最終?
中最多增加?
個(gè)數(shù)。我的代碼中使用了 set 求
,時(shí)間復(fù)雜度
,如果使用哈希表,則復(fù)雜度可降為
。
Div2C/Div1A Diamond Miner
題意: 軸上有?
個(gè)點(diǎn),
軸上有?
個(gè)點(diǎn),將?
軸上的點(diǎn)一一對(duì)應(yīng)地向?
軸上的點(diǎn)連線,求連出的線段長(zhǎng)度總和最小是多少。
題解:貪心,每次將? 軸上離原點(diǎn)最近的點(diǎn)與?
軸上離原點(diǎn)最近的點(diǎn)相連即可,證明建議看官方題解。時(shí)間復(fù)雜度
。
Div2D/Div1B Let's Go Hiking
題意:有? 個(gè)格子排成一排,每個(gè)格子有一個(gè)高度,高度各不相同。甲首先選擇一個(gè)起點(diǎn),然后乙再選擇一個(gè)起點(diǎn),然后甲乙兩人輪流移動(dòng)。每次可以往左或往右移動(dòng)一格,甲只能往比當(dāng)前位置低的格子移動(dòng),乙只能往比當(dāng)前位置高的格子移動(dòng)。輪到某人時(shí)如果他不能移動(dòng),則對(duì)方獲勝。若兩人都采取最優(yōu)策略,問甲要獲勝的話有多少種起點(diǎn)選擇方案。
題解:首先可以知道,甲的起點(diǎn)必須選在可以往左右兩邊走的位置,即“山頂”。因?yàn)槿绻椎钠瘘c(diǎn)只能往一個(gè)方向上走,那么乙在那個(gè)方向上更低一格堵住甲即可獲勝。

當(dāng)甲選擇某個(gè)山頂作為起點(diǎn)后,乙的選擇可以有以下兩種情況:
乙從某個(gè)“山腳”出發(fā),往甲不在的“山頂”移動(dòng)。此時(shí)甲乙兩人的路線互不影響,找到乙能走的最長(zhǎng)路線和甲能走的最長(zhǎng)路線對(duì)比即可。

乙從甲附近的“山坡”出發(fā),往甲所處的“山頂”移動(dòng)。此時(shí)乙所選的位置與甲的距離不能為偶數(shù),否則甲就可以往乙的方向上走從而堵住乙。當(dāng)乙按正確策略選擇起點(diǎn)后,甲不能往乙的方向上走,否則會(huì)被乙堵住。兩者路線確定后比較長(zhǎng)度即可。

對(duì)于每個(gè)山頂,判斷甲以該山頂為起點(diǎn)時(shí),乙能否有策略戰(zhàn)勝甲,若沒有則甲可獲勝,更新答案。時(shí)間復(fù)雜度 。(補(bǔ)充:事實(shí)上,如果甲想要獲勝,那么他的起點(diǎn)必須選在下山路徑最長(zhǎng)的“山頂”上,因此答案只有?
或
。)
Div2E/Div1C Garden of the Sun
題意:給定一個(gè)花園,表示為? 行?
列的矩陣?;▓@內(nèi)有的位置種了花,有的位置為空地,初始時(shí)每個(gè)空地周圍的八個(gè)格子不會(huì)有別的空地?,F(xiàn)需要挖出更多空地,使得原本為空地的位置互相連通,且最終空地不會(huì)形成環(huán)路。構(gòu)造一組滿足條件的方案。
題解:每隔兩行將一整行都變成空地,行與行之間找合適的位置相連,注意邊界位置的處理。

后面的題目暫未解決。