Codeforces Round #619 (Div. 2) D. Time to Run 矩阵回路构造
傳送門(mén)
文章目錄
- 題意:
- 思路:
題意:
給你一個(gè)n?mn*mn?m的矩陣,每?jī)蓚€(gè)相鄰點(diǎn)之間有個(gè)雙向邊,問(wèn)你能不能走滿kkk步,每一步走的邊不同,但是點(diǎn)可以相同,換句話說(shuō)就是走的邊不能再走了。輸出的時(shí)候輸出一個(gè)fff和一串不超過(guò)444個(gè)的字符,表示按照這個(gè)字符走fff次。輸出的行數(shù)不能超過(guò)300030003000行。
思路:
能看出來(lái)這是個(gè)歐拉回路,每個(gè)點(diǎn)度數(shù)為偶數(shù),一定有解,所以先判斷一下是否≤(4?n?m?2?n?2?m)\le (4*n*m-2*n-2*m)≤(4?n?m?2?n?2?m)。
判斷有解后,我們考慮如何構(gòu)造解。
一開(kāi)始我想的是先走完一行和一列,讓后將問(wèn)題轉(zhuǎn)換成(n?1)?(n?1)(n-1)*(n-1)(n?1)?(n?1)的子問(wèn)題,但是這顯然是不行的,因?yàn)閺?span id="ozvdkddzhkzd" class="katex--inline">111出發(fā),想要每個(gè)邊走一遍,那么終點(diǎn)一定在111號(hào)點(diǎn),所以考慮其他構(gòu)造方法。
由于我們有300030003000的限制,所以我們不能隨便構(gòu)造,下面介紹一個(gè)非常簡(jiǎn)單就能實(shí)現(xiàn)的構(gòu)造方法:
(1)(1)(1)先走m?1m-1m?1步到最右邊。
(2)(2)(2)向下走n?1n-1n?1步到最下邊。
(3)(3)(3)向上走n?1n-1n?1步回到剛才的點(diǎn)。
(4)(4)(4)向左走一步。
(5)(5)(5)重復(fù)(2),(3),(4)(2),(3),(4)(2),(3),(4),一直回到起點(diǎn)111。
(6)(6)(6)向下走一步。
(7)(7)(7)向右走m?1m-1m?1步。
(8)(8)(8)向左走m?1m-1m?1步。
(9)(9)(9)重復(fù)(6),(7),(8)(6),(7),(8)(6),(7),(8),一直到最下面的點(diǎn)。
(10)(10)(10)向上走n?1n-1n?1步。
這個(gè)方案的總次數(shù)上限是6?n6*n6?n,當(dāng)然達(dá)不到上限,正好是300030003000,所以可行。
當(dāng)然我們還有更好的構(gòu)造方法。
考慮題目說(shuō)的字符串不超過(guò)444個(gè),所以利用這個(gè)性質(zhì)考慮優(yōu)化。
可以發(fā)現(xiàn),我們上面(2),(3)(2),(3)(2),(3)步是一直走到底,我們考慮只往下走一個(gè)位置,再向上走一個(gè)位置,再向左走一個(gè)位置,這個(gè)操作字符是DULDULDUL,我們執(zhí)行n?1n-1n?1次即可。每一行都可以這樣做。但是最后一行只能先RRR再LLL,因?yàn)樗旅鏇](méi)有行了。
第二種的實(shí)現(xiàn)細(xì)節(jié)很多,就懶得寫(xiě)了。
總結(jié)
以上是生活随笔為你收集整理的Codeforces Round #619 (Div. 2) D. Time to Run 矩阵回路构造的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Network 黑暗爆炸 - 3732
- 下一篇: Codeforces Round #61