ETH官方钱包

創作內容

0 GP

爆肝啦!USACO 4-1 cryptcow 乳牛加密

作者:willyliu│2010-02-05 05:15:06│巴幣:0│人氣:380
這一題真的很噁心啊~
一直剪枝,程式碼根本就一大坨。
題目:有一種加密方式是說,把一個字串按照順序隨機插入’C’ ‘O’ ‘W’三個字元,並將 CO 以
及 OW 之間的子字串互換之後產生一個新的加密字串,現在給你一個經過重複加密過的字串,請問他有
沒有可能是 Begin the Escape execution at the Break of Dawn 經過加密而成。(題目敘述翻譯來自建中講義)

剪枝剪到一百五十五行,將上main有6個函式,太恐怖了,剪枝地獄。

我的解法:
0.由輸入得到序字串S,目標字串為T
1.找S出所有(C, O, W)序列
2.對於每一個數對(C, O, W),進行3~5
3.交換區間(C, O)及區間(O, W),把'C', 'O', 'W'標號讓他們消失
4.回到1,遞迴
5.把原二區間換回,把'C', 'O', 'W'標記還原
6.搜完一層,若有找到解,會傳True,否則為False

Theorem:
(1).如果S之某子字串S'中沒有C, O, W,那麼S'已不能改變(雖然可能被移動),所以T中必須出現S'
(2).S的第一個關鍵字(意指C或O或W)必須為C,最後一個必須為W,才能進行有效的操作
(3).S[0]到第一個關鍵字的prefix、最後一個關鍵字到結尾的suffix,必須和T的完全相同。因為prefix和suffix已不可能被改變或被移動
(4).第一個關鍵字必在上一層遞迴出現的第一個關鍵字之後;最後一個必須在上一層的之前。因為(3)

所以利用Theorem來快樂地剪枝
做到這裡,應該可以在3, 4秒內跑完所有測資。
可惜,他要求在2秒內通過,於是在第9筆時爆掉了!

看數字應該可以知道,這是常數問題,應該無法再剪枝了,所以我們要努力壓常數。
因為要進行整段文字的操作,每一次改變的操作是O(n),因此我們使用Linked List,讓它變成O(1)
然後,你會看到成功就在眼前了。
所以,本人使用隨機亂剪法,跟他拼人品,一傳就AC了。 

看完USACO Analysis後才發現,原來還還可以再剪= ="
引用網址:http://www.jamesdambrosio.com/TrackBack.php?sn=249564
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:|program|programming|程式設計|程式|USACO|

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★a27268139 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:USACO五天過後~解決... 後一篇:USACO IOI題 p...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】